Application Slim Framework 4 Skeleton MVC avec Build dans le système d'authentification.
composer create-project " hezecom/slim-starter v1.0 " [my-app] Database (Required for auth to work)
database / Copier le fichier .env.example sur .env
DB_DRIVER=mysql
DB_HOST=localhost
DB_DATABASE=slimapp
DB_USERNAME=root
DB_PASSWORD=
DB_PORT=3306
# Email setting Driver = (smtp | sendmail | mail)
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=username
MAIL_PASSWORD=password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS='[email protected]'
MAIL_FROM_NAME='Example'
Exemple de routage ci-dessous
<?php
$ app -> get ( ' / ' , ' HomeController:index ' )-> setName ( ' home ' );
$ app -> group ( '' , function ( $ route ) {
$ route -> get ( ' /register ' , AuthController::class . ' :createRegister ' )-> setName ( ' register ' );
$ route -> post ( ' /register ' , AuthController::class . ' :register ' );
$ route -> get ( ' /login ' , AuthController::class . ' :createLogin ' )-> setName ( ' login ' );
$ route -> post ( ' /login ' , AuthController::class . ' :login ' );
$ route -> get ( ' /verify-email ' , AuthController::class. ' :verifyEmail ' )-> setName ( ' verify.email ' );
$ route -> get ( ' /verify-email-resend ' ,AuthController::class. ' :verifyEmailResend ' )-> setName ( ' verify.email.resend ' );
$ route -> get ( ' /forgot-password ' , PasswordController::class . ' :createForgotPassword ' )-> setName ( ' forgot.password ' );
$ route -> post ( ' /forgot-password ' , PasswordController::class . ' :forgotPassword ' );
$ route -> get ( ' /reset-password ' , PasswordController::class. ' :resetPassword ' )-> setName ( ' reset.password ' );
$ route -> get ( ' /update-password ' , PasswordController::class. ' :createUpdatePassword ' )-> setName ( ' update.password ' );
$ route -> post ( ' /update-password ' , PasswordController::class. ' :updatePassword ' );
})-> add ( new GuestMiddleware ( $ container ));Exemple de contrôleur Simplify
<?php
namespace App Controllers ;
class HomeController extends Controller
{
public function index ( Request $ request , Response $ response )
{
return view ( $ response , ' index.twig ' );
}
}Utilise un orm éloquent utilisé par Laravel Framework. Il prend actuellement en charge MySQL, Postgres, SQL Server et SQLite. Référence - Base d'illumination / données
<?php
namespace App Models ;
use Illuminate Database Eloquent Model ;
class User extends Model
{
protected $ table = ' users ' ;
protected $ fillable = [
' email ' ,
' username ' ,
' password ' ,
];
} <?php
namespace App Middleware ;
use Psr Http Message ServerRequestInterface as Request ;
use Psr Http Server RequestHandlerInterface as RequestHandler ;
class AuthMiddleware extends Middleware
{
public function __invoke ( Request $ request , RequestHandler $ handler )
{
if (! $ this -> container -> get ( ' auth ' )-> isLogin ()) {
return redirect ()-> route ( ' login ' )-> with ( ' error ' , ' Access denied, you need to login. ' );
}
$ response = $ handler -> handle ( $ request );
return $ response ;
}
}Utilisez le moteur de validation le plus impressionnant jamais créé pour PHP. Référence - respect / validation
<?php
namespace App Controllers Auth ;
use App Controllers Controller ;
use Respect Validation Validator as v ;
class AuthController extends Controller
{
public function register ( Request $ request , Response $ response )
{
$ validation = $ this -> validator -> validate ( $ request , [
' email ' => v:: noWhitespace ()-> notEmpty ()-> email (),
' username ' => v:: noWhitespace ()-> notEmpty ()-> alnum (),
' password ' => v:: notEmpty ()-> stringType ()-> length ( 8 ),
]);
if ( $ validation -> failed ()) {
redirect ()-> route ( ' register ' );
}
// more coding here
}
}Référence Slim Documents officiels - Slim Framework
| -- slim-born
| -- app
| -- Auth
| -- Controllers
| -- Middleware
| -- Models
| -- Lib
| -- bootstrap
| -- app.php
| -- database.php
| -- helper.php
| -- logs
| -- public
| -- resources
| -- route
....$ phpunitToutes les contributions sont les bienvenues! Si vous souhaitez contribuer, veuillez d'abord créer un problème afin que votre fonctionnalité, problème ou question puisse être discuté.
Ce projet est concédé sous licence de la licence du MIT.