ホームページ >バックエンド開発 >PHPチュートリアル >ララベル5.0
写真: http://stackphp.com/
上の図に示すように、中央の緑色の領域がアプリケーション全体のコア領域です。
つまり、ミドルウェアは、プログラム ロジックの一部ではなく、リクエストと応答を処理する一連の方法です。
Laravel はデフォルトでミドルウェアを使用して、リクエスト内の暗号化と復号化、および Cookie とセッションを処理します。必要なミドルウェアをカスタマイズすることもできます。
artisan make:middleware MyMiddleware
上記のコマンドを実行してミドルウェア ファイルを生成します:
<?php namespace App\Http\Middleware;use Closure;use Illuminate\Contracts\Routing\Middleware;class MyMiddleware implements Middleware { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { // }}
ハンドルのコンテンツを完成させますメソッド (例としてリクエストポートを使用):
<?php namespace App\Http\Middleware;use Closure;use Illuminate\Contracts\Routing\Middleware;class MyMiddleware implements Middleware { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { // Test for an even vs. odd remote port if (($request->server->get('REMOTE_PORT') / 2) % 2 > 0) { throw new \Exception("WE DON'T LIKE ODD REMOTE PORTS"); } return $next($request); }}
Laravel 5 でミドルウェアを追加するには 2 つの方法があり、どちらも AppProvidersAppServiceProvider で記述されます。
デフォルトでは $middleware と $stack の 2 つのプロパティがあり、$stack のミドルウェアは応答を受信するたびに処理されますが、$middleware のミドルウェアはオンデマンドで処理されます。
多くの場合、デフォルトのミドルウェアは次のとおりです:
protected $stack = [ 'App\Http\Middleware\MaintenanceMiddleware', 'Illuminate\Cookie\Middleware\Guard', 'Illuminate\Cookie\Middleware\Queue', 'Illuminate\Session\Middleware\Reader', 'Illuminate\Session\Middleware\Writer', ];protected $middleware = [ 'auth' = 'App\Http\Middleware\AuthMiddleware', 'auth.basic' => 'App\Http\Middleware\BasicAuthMiddleware', 'csrf' => 'App\Http\Middleware\CsrfMiddleware', 'guest' => 'App\Http\Middleware\GuestMiddleware', ];
ミドルウェアはすべてのリクエストを処理します:
protected $stack = [ 'App\Http\Middleware\MyMiddleware' 'App\Http\Middleware\MaintenanceMiddleware', 'Illuminate\Cookie\Middleware\Guard', 'Illuminate\Cookie\Middleware\Queue', 'Illuminate\Session\Middleware\Reader', 'Illuminate\Session\Middleware\Writer', ];
ミドルウェアはオンデマンドで処理します:
protected $middleware = [ 'auth' => 'App\Http\Middleware\AuthMiddleware', 'auth.basic' => 'App\Http\Middleware\BasicAuthMiddleware', 'csrf' => 'App\Http\Middleware\CsrfMiddleware', 'guest' => 'App\Http\Middleware\GuestMiddleware', 'absurd' => 'App\Http\Middleware\MyMiddleware', ];
ミドルウェア ルーティング アノテーション
コントローラー クラスに直接書き込みます:
/** * @Resource("foobar/photos") * @Middleware("auth") * @Middleware("absurd", except={"update"}) * @Middleware("csrf", only={"index"}) */class FoobarPhotosController{}
メソッドに書き込みます:
/** * @Middleware("auth.basic") */public function index() {}
$this->middleware()
コンストラクターまたはメソッド内で $this->middleware() を使用して、対応するミドルウェアをロードできます。
...use Illuminate\Routing\Controller;class AwesomeController extends Controller { public function __construct() { $this->middleware('csrf'); $this->middleware('auth', ['only' => 'update']) }}
routes.php ミドルウェアのセットアップ
// Routes.php// Single route$router->get("/awesome/sauce", "AwesomeController@sauce", ['middleware' => 'auth']);// Route group$router->group(['middleware' => 'auth'], function() { // lots of routes that require auth middleware});
アプリケーション応答前後のミドルウェア 処理:
処理前:
...class BeforeMiddleware implements Middleware { public function handle($request, Closure $next) { // Do Stuff return $next($request); }}
処理後:
...class AfterMiddleware implements Middleware { public function handle($request, Closure $next) { $response = $next($request); // Do stuff return $response; }}