用户请求最常见使用的中间件、或者请求参数的处理和用户身份的校验
前置
aop 就是把相同的操作单独提取某一个地方,这个地方可能是中间件,也可能是一个事件,只写一次
一、创建中间件
E:\xampp\htdocs\xampp\blog>php artisan make:middleware OldMiddleware
<?php
namespace App\Http\Middleware;
use Closure;
use Response;
class OldMiddleware
{
public function handle($request, Closure $next)
{
echo 'hello 中间件 <br>';
#保安
#假设用户没有一个token 就不允许通过
if (!$request->input('token')) {
return Response::make('没有门票不能通过');
}
#aop 面向于切面 ==》 面向过程补充
return $next($request); // $next($request)执行用户的请求操作
// $response;
}
}
路径
E:\xampp\htdocs\xampp\blog\app\Http\Middleware\OldMiddleware.php
二、先注册路由中间件
E:\xampp\htdocs\xampp\blog\app\Http\Kernel.php
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'old' => \App\Http\Middleware\OldMiddleware::class,
];
路由
use App\Contracts\DBContracts;
#路由中间件
Route::get('demo', function(DBContracts $db){
return $db->index();
})->middleware('old');
#契约
<?php
namespace App\Contracts;
/**
*
*/
interface DBContracts
{
public function index();
}
#注册提供服务者
#路径 E:\xampp\htdocs\xampp\blog\app\Providers\RinkServicePrivoder.php
public function register()
{
#向我们容器中注入信息 #这就是标识 这就是我们标识所对应的类
$this->app->singleton('dbfacade', \App\Utils\MySql::class);
// $this->app->singleton('mysql', \App\Services\MysqlService::class);
// 契约和实例类做一个绑定 契约的类 实例类
$this->app->singleton(\App\Contracts\DBContracts::class, \App\Utils\Orcale::class);
// \App\Utils\MySQL::class =》 \App\Utils\Oracle::class
}
路径 public\index.php
#传进去契约,解析出来实例
#Illuminate\Contracts\Http\Kernel::class 解析的是app/Http/kernel.php这个文件
#获取容器使用make,用这个字符串获取出他的对象
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
$response = $kernel->handle( //执行用户的请求
$request = Illuminate\Http\Request::capture() #获取用户请求参数
);
$response->send(); //输出结果
$kernel->terminate($request, $response); //停止用户所开启的中间件
正常的
不正常的