Поиск…
Вступление
замечания
Перед программным кодом контроллера будет выполняться «до» промежуточное программное обеспечение; в то время как промежуточное ПО «После» выполняется после того, как запрос обрабатывается приложением
Определение промежуточного ПО
Чтобы определить новое промежуточное ПО, мы должны создать класс промежуточного ПО:
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);