Slim Framework 3 skeleton application has authentication MVC construction
Github: github.com/HavenShen/s…
The user authentication has been achieved, there is a need to install and use.
Installation
composer create-project havenshen/slim-born [my-app]
复制代码
.env
Copy file .env.example to .env
DB_DRIVER=mysql
DB_HOST=localhost
DB_DATABASE=slimborn
DB_USERNAME=root
DB_PASSWORD=
DB_PORT=3306
复制代码
Router
This is a Slim Framework Router. Reference - Slim Router
<?php
$app->get('/', 'HomeController:index')->setName('home');
$app->group('', function () {
$this->get('/auth/signup', 'AuthController:getSignUp')->setName('auth.signup');
$this->post('/auth/signup', 'AuthController:postSignUp');
$this->get('/auth/signin', 'AuthController:getSignIn')->setName('auth.signin');
$this->post('/auth/signin', 'AuthController:postSignIn');
})->add(new GuestMiddleware($container));
复制代码
Controller
Use Slim Framework Twig View. Reference - Twig-View
<?php
namespace App\Controllers;
class HomeController extends Controller
{
public function index($request, $response)
{
return $this->view->render($response, 'home.twig');
}
}
复制代码
Model
Use Laravel PHP Framework Eloquent. Reference - illuminate/database
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected $table = 'users';
protected $fillable = [
'email',
'name',
'password',
];
public function setPassword($password)
{
$this->update([
'password' => password_hash($password, PASSWORD_DEFAULT)
]);
}
}
复制代码
Middleware
<?php
namespace App\Middleware;
class AuthMiddleware extends Middleware
{
public function __invoke($request, $response, $next)
{
if(! $this->container->auth->check()) {
$this->container->flash->addMessage('error', 'Please sign in before doing that');
return $response->withRedirect($this->container->router->pathFor('auth.signin'));
}
$response = $next($request, $response);
return $response;
}
}
复制代码
Validation
Use the most awesome validation engine ever created for PHP. Reference - Respect/Validation
<?php
namespace App\Controllers\Auth;
use App\Models\User;
use App\Controllers\Controller;
use Respect\Validation\Validator as v;
class AuthController extends Controller
{
public function postSignUp($request, $response)
{
$validation = $this->validator->validate($request, [
'email' => v::noWhitespace()->notEmpty()->email()->emailAvailable(),
'name' => v::noWhitespace()->notEmpty()->alpha(),
'password' => v::noWhitespace()->notEmpty(),
]);
if ($validation->failed()) {
return $response->withRedirect($this->router->pathFor('auth.signup'));
}
// todo someting
}
}
复制代码
More basic functions
reference slim official documents - Slim Framework
Use Packages
- illuminate/database - It also serves as the database layer of the Laravel PHP framework.
- Respect/Validation - The most awesome validation engine ever created for PHP.
- slimphp/Slim - Slim Framework created.
- slimphp/Slim-Csrf - Slim Framework created.
- slimphp/Twig-View - Slim Framework created.
- slimphp/Slim-Flash - Slim Framework created.
Look Feel
Directory Structure
|-- slim-born
|-- app
|-- Auth
|-- Controllers
|-- Middleware
|-- Models
|-- Validation
|-- Routes.php
|-- bootstrap
|-- app.php
|-- public
|-- resources
....
复制代码
Testing
$ phpunit
复制代码
License
The MIT License (MIT). Please see License File for more information.