Szukaj…
Wprowadzenie
Uwagi
Oprogramowanie pośrednie „Before” zostanie uruchomione przed kodem akcji kontrolera; podczas gdy oprogramowanie pośredniczące „Po” jest wykonywane po przetworzeniu żądania przez aplikację
Definiowanie oprogramowania pośredniego
Aby zdefiniować nowe oprogramowanie pośrednie, musimy utworzyć klasę oprogramowania pośredniego:
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);
}
}
Następnie musimy zarejestrować oprogramowanie pośrednie: jeśli oprogramowanie pośrednie powinno być powiązane ze wszystkimi trasami aplikacji, powinniśmy dodać go do właściwości oprogramowania pośredniego app/Http/Kernel.php
:
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\App\Http\Middleware\AuthenticationMiddleware::class
];
chociaż jeśli chcemy powiązać oprogramowanie pośrednie tylko z niektórymi trasami, możemy dodać je do $routeMiddleware
//register the middleware as a 'route middleware' giving it the name of 'custom_auth'
protected $routeMiddleware = [
'custom_auth' => \App\Http\Middleware\AuthenticationMiddleware::class
];
a następnie powiąż go z pojedynczymi trasami w następujący sposób:
//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');
Przed a po Middleware
Przykładem oprogramowania pośredniego „przed” byłoby:
<?php
namespace App\Http\Middleware;
use Closure;
class BeforeMiddleware
{
public function handle($request, Closure $next)
{
// Perform action
return $next($request);
}
}
podczas gdy oprogramowanie pośrednie „po” wyglądałoby tak:
<?php
namespace App\Http\Middleware;
use Closure;
class AfterMiddleware
{
public function handle($request, Closure $next)
{
$response = $next($request);
// Perform action
return $response;
}
}
Kluczowa różnica polega na tym, jak obsługiwany jest parametr $request
. Jeśli akcje zostaną wykonane przed $next($request)
, co wydarzy się przed wykonaniem kodu kontrolera, a wywołanie najpierw $next($request)
spowoduje, że akcje zostaną wykonane po wykonaniu kodu kontrolera.
Route Middleware
Każde oprogramowanie pośrednie zarejestrowane jako routeMiddleware
w app/Http/Kernel.php
może być przypisane do trasy.
Istnieje kilka różnych sposobów przypisywania oprogramowania pośredniego, ale wszystkie robią to samo.
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']);
We wszystkich powyższych przykładach można również przekazywać w pełni kwalifikowane nazwy klas jako oprogramowanie pośrednie, niezależnie od tego, czy zostało zarejestrowane jako oprogramowanie pośrednie trasy.
use App\Http\Middleware\CheckAdmin;
Route::get('/admin', 'AdminController@index')->middleware(CheckAdmin::class);