web-dev-qa-db-ja.com

Laravel 5のフィルター

Laravel 5でフィルターを作成するにはどうすればよいですか? filters のアイデアはなくなりますか?

44
JoshuaDavid

短い答えはノーです。ルートフィルターは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月。

58
orrd
  1. でミドルウェアを作成する

    php artisan make:middleware class_name
    
  2. App/Providers/RouteServiceProvider.phpにショートハンドキーを作成します。

    protected $middleware = [
      // ....
      'shortName'  => 'App\Http\Middleware\class_name',
    ];
    
  3. (L4フィルターのように)任意のルートに対して有効にすることができます:

    $router->post('url', ['middleware' => 'shortName', function() {
     ... 
    }]);
    
12
igaster

ミドルウェアが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を返すだけです。

新機能Laravel 5

9
majidarif

前後のコメントについて。

上記の 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']を使用すると、それに応じて処理する必要があります。

7
ugochimbo

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'
3
Marwan

はい、ミドルウェアは正しい場所です Laravel 5.0 docs

HTTPミドルウェアは、アプリケーションに入るHTTP要求をフィルタリングするための便利なメカニズムを提供します。

2
Maykonn

個人的にはミドルウェアを追加することは良い習慣だと思いますが、コントローラー、rubyonrailsスタイル、

次のようにします。

class myController{

   //filters
   public function myFilter()
   {
      //my filter's logic
   }

   public function __construct()
   {
     $this->myFilter();
     //middlewares or any other code
   }


 }
2
Hamza Ouaghad

laravel 5は、laravel 4にあったフィルターの代わりにミドルウェアを導入しました。_laravel 5 official docs =。

1
Lakin Mohapatra