Поиск…


Вступление

Middleware - это классы, которые могут быть назначены одному или нескольким маршрутам и используются для выполнения действий на ранней или заключительной этапах цикла запроса. Мы можем думать о них как о серии слоев, которые HTTP-запрос должен пройти, пока он выполняется

замечания

Перед программным кодом контроллера будет выполняться «до» промежуточное программное обеспечение; в то время как промежуточное ПО «После» выполняется после того, как запрос обрабатывается приложением

Определение промежуточного ПО

Чтобы определить новое промежуточное ПО, мы должны создать класс промежуточного ПО:

class AuthenticationMiddleware
{
    //this method will execute when the middleware will be triggered
    public function handle ( $request, Closure $next )
    {
        if ( ! Auth::user() )
        {
            return redirect('login');
        }

        return $next($request);
    }
}

Затем мы должны зарегистрировать промежуточное ПО: если промежуточное ПО должно быть привязано ко всем маршрутам приложения, мы должны добавить его в свойство промежуточного ПО app/Http/Kernel.php :

protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \App\Http\Middleware\AuthenticationMiddleware::class
];

в то время как если мы хотим связывать промежуточное программное обеспечение с некоторыми маршрутами, мы можем добавить его в $routeMiddleware

//register the middleware as a 'route middleware' giving it the name of 'custom_auth'
protected $routeMiddleware = [
    'custom_auth' => \App\Http\Middleware\AuthenticationMiddleware::class
];

а затем привяжите его к одиночным маршрутам следующим образом:

//bind the middleware to the admin_page route, so that it will be executed for that route
Route::get('admin_page', 'AdminController@index')->middleware('custom_auth');

До и после промежуточного ПО

Примером «до» промежуточного программного обеспечения будет следующее:

<?php

namespace App\Http\Middleware;

use Closure;

class BeforeMiddleware
{
    public function handle($request, Closure $next)
    {
        // Perform action

        return $next($request);
    }
}

тогда как «после» промежуточное ПО будет выглядеть так:

<?php

namespace App\Http\Middleware;

use Closure;

class AfterMiddleware
{
    public function handle($request, Closure $next)
    {
        $response = $next($request);

        // Perform action

        return $response;
    }
}

Основное различие заключается в том, как обрабатывается параметр $request . Если действия выполняются до $next($request) которые будут выполняться до выполнения кода контроллера при вызове $next($request) сначала будут выполняться действия, выполняемые после выполнения кода контроллера.

Маршрутное промежуточное ПО

Любое промежуточное программное обеспечение, зарегистрированное как routeMiddleware в app/Http/Kernel.php может быть назначено маршруту.

Существует несколько разных способов назначения промежуточного программного обеспечения, но все они делают то же самое.

Route::get('/admin', 'AdminController@index')->middleware('auth', 'admin');
Route::get('admin/profile', ['using' => 'AdminController@index', 'middleware' => 'auth']);
Route::get('admin/profile', ['using' => 'AdminController@index', 'middleware' => ['auth', 'admin']);

Во всех приведенных выше примерах вы также можете передавать полностью квалифицированные имена классов в качестве промежуточного программного обеспечения, независимо от того, было ли оно зарегистрировано в качестве промежуточного программного обеспечения маршрута.

use App\Http\Middleware\CheckAdmin;
Route::get('/admin', 'AdminController@index')->middleware(CheckAdmin::class);


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow