ララベル5.0

WBOY
WBOYオリジナル
2016-06-20 12:47:53826ブラウズ

写真: http://stackphp.com/

上の図に示すように、中央の緑色の領域がアプリケーション全体のコア領域です。

つまり、ミドルウェアは、プログラム ロジックの一部ではなく、リクエストと応答を処理する一連の方法です。

Laravel はデフォルトでミドルウェアを使用して、リクエスト内の暗号化と復号化、および Cookie とセッションを処理します。必要なミドルウェアをカスタマイズすることもできます。

Write middleware

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;    }}


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。