Laravel 5でフィルターを作成するにはどうすればよいですか? filters のアイデアはなくなりますか?
短い答えはノーです。ルートフィルターはnotLaravel 5.0(これに関する誤解を招くような情報があるにもかかわらず)。必要に応じて、ルートで「前」フィルターと「後」フィルターを使用できるようにする機能が引き続き存在します。 「filters.php」ファイルは提供されなくなりましたが、おそらくどこか別の場所で、おそらく最も適切にProviders/RouteServiceProvider.phpのboot()関数でフィルターを定義できます。
ただし、、ミドルウェアは同じ機能を実現するための好ましい方法です。 http://laravel.com/docs/master/middleware を使用方法についての情報を参照してください。
ミドルウェアは、「前」または「後」フィルターのように動作するように実装できます。また、すべてのルート(「グローバルミドルウェア」と呼ばれる)に適用したり、特定のルートに割り当てたりすることができます(たとえば、routes.phpファイルのルート定義に「 'middleware' => 'auth'」を追加します)。
ミドルウェアの唯一の重要な制限は、現在、パラメーターを渡す方法を提供していないことです(フィルターの場合と同様)。これは、たとえば「requirePermission:admin」のようなことはできないことを意味します。現在、この制限に対処するには2つの方法があります。代わりに、Larvel 4.2で行ったように、代わりにルートフィルタを使用できます。または、ミドルウェアの使用を好む場合、これはちょっとしたハックのように感じますが、 http://blog.elliothesp .co.uk/coding/passing-parameters-middleware-laravel-5 / 。
2015-05-29更新:ミドルウェアのパラメーター はLaravel 5.1以降で利用可能です。
2015-06-10更新:ルートフィルターはミドルウェアよりも推奨されなくなり、Laravelのリリースで完全に削除されます5.2 2015年12月。
でミドルウェアを作成する
php artisan make:middleware class_name
App/Providers/RouteServiceProvider.phpにショートハンドキーを作成します。
protected $middleware = [
// ....
'shortName' => 'App\Http\Middleware\class_name',
];
(L4フィルターのように)任意のルートに対して有効にすることができます:
$router->post('url', ['middleware' => 'shortName', function() {
...
}]);
ミドルウェアがLaravelのフィルターを置き換えているようです。ご質問は。正解は、ミドルウェアです。レイヤーと考えてください。
より詳細な回答については、 this outを確認してください。
クイック検索により、requests
が新しい検証方法であることが示されました。しかし、ユースケースがこれに適用できるかどうかはわかりません。
Laravel 5は「リクエスト」の概念を導入しています。これは、HTTPリクエストの一部として実行するロジックをまとめたものですが、単なるルートフィルタではありません。最有力候補:データ検証。
事前検証(フィルター)を行う1つの方法は、authorize()
メソッドを使用することです。
<?php namespace App\Http\Requests\Auth;
use Illuminate\Foundation\Http\FormRequest;
class RegisterRequest extends FormRequest {
public function rules()
{
return [
'email' => 'required|email|unique:users',
'password' => 'required|confirmed|min:8',
];
}
public function authorize()
{
return true;
}
}
Validator :: make()に渡す前にルールの配列を返すrules()メソッドと、ユーザー認証を提供するauthorize()メソッドがあります。通常、すべてのユーザーが登録できるようにするため、単にtrueを返すだけです。
前後のコメントについて。
上記の link から:
ミドルウェアで..
#Before
public function handle($request, Closure $next)
{
//Do stuff
return $request;
}
#After
public function handle($request, Closure $next)
{
$response = $next($request);
// Do stuff {on $response}
return $response;
}
['middleware' => 'shortName']
を使用すると、それに応じて処理する必要があります。
filters.phpは削除され、routes.phpの横にあるKernel.phpに置き換えられました。
protected $routeMiddleware = [
'auth' => 'App\Http\Middleware\Authenticate',
'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
];
ただし、フィルタコードを直接追加することはできません。最初にミドルウェアクラス(app/Http/Middleware)を作成する必要があります。次に、Kernel.phpファイルで目的のキーを作成し、次のような独自のミドルウェアクラスを参照します。
'product.check' => 'App\Http\Middleware\ProductChecker'
はい、ミドルウェアは正しい場所です Laravel 5.0 docs :
HTTPミドルウェアは、アプリケーションに入るHTTP要求をフィルタリングするための便利なメカニズムを提供します。
個人的にはミドルウェアを追加することは良い習慣だと思いますが、コントローラー、rubyonrailsスタイル、
次のようにします。
class myController{
//filters
public function myFilter()
{
//my filter's logic
}
public function __construct()
{
$this->myFilter();
//middlewares or any other code
}
}
laravel 5は、laravel 4にあったフィルターの代わりにミドルウェアを導入しました。_laravel 5 official docs =。