これは、ユーザー (Laravel ビュー) がサーバー (Laravel コントローラー) にリクエストを送信すると、リクエストがミドルウェアを通過することを意味します。 このようにして、ミドルウェアはリクエストが認証されているかどうかを確認できます。
Laravel を使用すると、 defi完了し、追加のミドルウェアを使用して、認証を除くさまざまなタスクを実行します。
認証やCSRF保護などのLaravelミドルウェアはディレクトリにあります アプリ/Http/ミドルウェア .
したがって、ミドルウェアは http リクエスト フィルターであり、これを介して条件を確認し、アクションを実行できると言えます。
新しいミドルウェアを作成するには、次のコマンドを実行します。
php artisan make:middleware <name-of-middleware>
私たちは、 middleware
そして私たちはそれを呼びます CheckAge
, artisan
次のように答えます。
上のウィンドウは、ミドルウェアが「」という名前で正常に作成されたことを示しています。 チェックエイジ "
CheckAge ミドルウェアが作成されているかどうかを確認するには、app/Http/Middleware フォルダー内のプロジェクトに移動します。新しく作成されたファイルが表示されます。
新しく作成されたファイルには次のコードがあります
<?php
namespace App\Http\Middleware;
use Closure;
class CheckAge
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
return $next($request);
}
}
ミドルウェアを使用するには、ミドルウェアを登録する必要があります。
Laravel には XNUMX 種類のミドルウェアがあります。
Middleware globale
Route Middleware
Il グローバルミドルウェア アプリケーションからのすべての HTTP リクエストで実行されますが、 ルートミドルウェア 特定のパスに割り当てられます。 ミドルウェアは、 app/Http/Kernel.php。 このファイルには XNUMX つのプロパティが含まれています $ミドルウェア e $routeミドルウェア . $ミドルウェア プロパティ グローバルミドルウェアと所有権を登録するために使用されます $routeミドルウェア ルート固有のミドルウェアを登録するために使用されます。
グローバル ミドルウェアを登録するには、$middleware プロパティの末尾にクラスをリストします。
protected $middleware = [
\App\Http\Middleware\TrustProxies::class,
\App\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];
ルート固有のミドルウェアを登録するには、キーと値を $routeMiddleware プロパティに追加します。
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];
我々は作成した チェックエイジ 前の例では。 これをミドルウェアのルート プロパティに登録できるようになりました。 このような登録のコードを以下に示します。
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'Age' => \App\Http\Middleware\CheckAge::class,
];
ミドルウェアでパラメーターを渡すこともできます。
たとえば、アプリケーションにユーザー、管理者、スーパー管理者などのさまざまなロールがある場合。 ロールに基づいてアクションを認証したい場合は、ミドルウェアでパラメーターを渡すことで実行できます。
作成したミドルウェアには次の関数が含まれており、引数の後にカスタム引数を渡すことができます $next .
public function handle($request, Closure $next)
{
return $next($request);
}
次に、ゼロから作成する新しいミドルウェアにロール パラメータを設定してみましょう。次に、次のコマンドを実行してロール ミドルウェアの作成に進みます。
次のようにハンドル メソッドを変更します。
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware {
public function handle($request, Closure $next, $role) {
echo "Role: ".$role;
return $next($request);
}
}
パラメータを追加しました $role
、およびメソッド内の行 echo
出力をロールの名前に書き込みます。
次に、特定のパスに RoleMiddleware ミドルウェアを登録しましょう
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'Age' => \App\Http\Middleware\CheckAge::class,
'Role' => \App\Http\Middleware\RoleMiddleware::class,
];
パラメータを使用してミドルウェアをテストするには、リクエストとレスポンスを作成する必要があります。 応答をシミュレートするために、TestController と呼ぶコントローラーを作成しましょう。
php artisan make:controller TestController --plain
実行したばかりのコマンドは、フォルダー内に新しいコントローラーを作成します app/Http/TestController.php
、メソッドを変更します index
線で echo "<br>Test Controller.";
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class TestController extends Controller {
public function index() {
echo "<br>Test Controller.";
}
}
レスポンスを設定したら、ファイルを編集してリクエストを作成します routes.php
を追加することによって route role
Route::get('role',[
'middleware' => 'Role:editor',
'uses' => 'TestController@index',
]);
この時点で、URL にアクセスして例を試すことができます。 http://localhost:8000/role
ブラウザにはXNUMXつが表示されます echo
Role editor
Test Controller
Il terminable Middleware
応答がブラウザに送信された後、いくつかのタスクを実行します。 これは、メソッドを使用してミドルウェアを作成することで実現できます。 ミドルウェアで終了します。 Il terminable Middleware
に登録する必要があります middleware
グローバル。 メソッド terminate
XNUMX つの引数を受け取ります $ request e $応答。
この方法 Terminate
次のコードに示すように作成する必要があります。
php artisan make:middleware TerminateMiddleware
ミドルウェアが作成されたら app/Http/Middleware/TerminateMiddleware.php
次のようにコードを変更しましょう
<?php
namespace App\Http\Middleware;
use Closure;
class TerminateMiddleware {
public function handle($request, Closure $next) {
echo "Executing statements of handle method of TerminateMiddleware.";
return $next($request);
}
public function terminate($request, $response) {
echo "<br>Executing statements of terminate method of TerminateMiddleware.";
}
}
この場合、メソッドがあります handle
とメソッド terminate
XNUMXつのパラメータで $request
e $response
.
それでは、ミドルウェアを登録しましょう
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'Age' => \App\Http\Middleware\CheckAge::class,
'Role' => \App\Http\Middleware\RoleMiddleware::class,
'terminate' => \App\Http\Middleware\TerminateMiddleware::class,
];
次に、応答をシミュレートするコントローラーを作成する必要があります
php artisan make:controller XYZController --plain
クラスの内容を変更する
class XYZController extends Controller {
public function index() {
echo "<br>XYZ Controller.";
}
}
次に、ファイルを編集する必要があります routes/web.php
リクエストを有効にするために必要なルートを追加する
Route::get('terminate',[
'middleware' => 'terminate',
'uses' => 'XYZController@index',
]);
この時点で、URL にアクセスして例を試すことができます。 http://localhost:8000/terminate
ブラウザには次の行が表示されます
Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware
Ercole Palmeri
あなたも好きかも:
先週の月曜日、フィナンシャル・タイムズ紙はOpenAIとの契約を発表した。 FT は世界クラスのジャーナリズムにライセンスを供与しています…
何百万人もの人々がストリーミング サービスに月額料金を払っています。あなたは…というのが一般的な意見です。