slim starter
v1.0
Slim Framework 4 skeleton MVC application with build in authentication system.
composer create-project "hezecom/slim-starter v1.0" [my-app]Database (Required for auth to work)
databaseCopy file .env.example to .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'
Routing example below
<?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));Controller example simplify
<?php
namespace AppControllers;
class HomeController extends Controller
{
public function index(Request $request, Response $response)
{
return view($response,'index.twig');
}
}Uses Eloquent ORM used by Laravel Framework. It currently supports MySQL, Postgres, SQL Server, and SQLite. Reference - illuminate/database
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class User extends Model
{
protected $table = 'users';
protected $fillable = [
'email',
'username',
'password',
];
}<?php
namespace AppMiddleware;
use PsrHttpMessageServerRequestInterface as Request;
use PsrHttpServerRequestHandlerInterface 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;
}
}Use the most awesome validation engine ever created for PHP. Reference - Respect/Validation
<?php
namespace AppControllersAuth;
use AppControllersController;
use RespectValidationValidator 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
}
}reference slim official documents - Slim Framework
|-- slim-born
|-- app
|-- Auth
|-- Controllers
|-- Middleware
|-- Models
|-- Lib
|-- bootstrap
|-- app.php
|-- database.php
|-- helper.php
|-- logs
|-- public
|-- resources
|-- route
....$ phpunitAll contributions are welcome! If you wish to contribute, please create an issue first so that your feature, problem or question can be discussed.
This project is licensed under the terms of the MIT License.