2016-04-23 20 views
0

特定のフィールドに応じて動的バインディングが可能かどうかは疑問でした。Laravel 5.2の動的要求バインディング

例:App\Http\Requests\CustomRequest

しかし、私は例えば、入力フィールドに応じて別の要求をインスタンス化するために必要な:

public function someAction(Request $request) 
{ 
    switch($request->input('flag_field')) { 
     case 'custom_request_1': 
      // find some way to have the CustomRequest1 instance 
      break; 
     case 'custom_request_2': 
      // find some way to have the CustomRequest2 instance 
      break; 
    } 
} 

通常、我々のようなコントローラに注入されたカスタム要求を持っていること

もちろん、それを処理するのはかなり醜い方法であり、私はそれをやりたくないです。

誰か他の方法を知っていますか?たぶんサービスバインディングのようなものかもしれません。

ありがとうございます!

+0

私は要求を拡張提案し、そのクラスでこのロジックを移動します。 –

+0

それは悪い習慣ではないでしょうか? – henriale

答えて

0

私はより良い方法を見つけました。私はRequestクラスをインターフェイス(RequestInterface)に変更し、AppServiceProvider登録メソッドでバインドしました。

コントローラクラス:

public function someAction(RequestInterface $request) 
{ 
} 

Providerクラス:

public function register() 
{ 
    $this->app->bind(RequestInterface::class, function ($app) { 
     switch ($app->make('request')->input('flag_field')) { 
       case 'custom_request_1': 
        return $app->make(CustomRequest1::class); 
        break; 
       case 'custom_request_2': 
        return $app->make(CustomRequest2::class); 
        break; 
    }); 
} 
+0

これは、頭上の王様との間に、間違って設計されたプロセスです。 – ash

+0

私はまだもっと良い解決策を探しています。あなたが何か考えている場合は、私たちと共有してください – henriale

+0

あなたがしていることはほぼ正しいですが、フラグフィールドのアイデアは今、私はあなたの実際の目標、両方の要求とその違いについての詳細情報が必要になります。 – ash