2015-12-14 19 views
5

でアクションを実行する前に、私は店や更新方法に以下のコードを書いています:Laravel 5.1

$v = Validator::make($request->all(), [ 
    'field' => 'required|max:100|min:5' 
]); 

if ($v->fails()) { 
    return redirect('route name') 
       ->withErrors($v) 
       ->withInput(); 
} 

は、任意のアクションメソッドを実行する前に実行し任意の作り付けのアクションメソッドはありますか?そうであれば、それは個々の行動方法またはコントローラに対して有効か?

+1

ミドルウェアを使用することができます... – Amarnasan

+0

@Amarnasan:私はリンクを確認しましたが、どのアクション方法よりも前に発火する共通の前夜については何も考えていません。 –

+0

達成したいことの具体例を挙げることはできますか? –

答えて

0

組み込みのソリューションはミドルウェアを使用することですが、特定のアクションに対してそのコードを実行したいと思っています。

私があなただったら、私はすべての私のコントローラから継承する具象controllerクラスを作成したい、とこのコントローラは、このようなものになります。私はこのことができます願ってい

class FilteredController extends BaseController 
{ 
    private function getControllerAction(Request $request) 
    { 
     $action = $request->route()->getAction(); 

     $controller = class_basename($action['controller']); 

     list($controller, $action) = explode('@', $controller); 

     return ['action' => $action, 'controller' => $controller]; 
    } 

    private function validateUpdateRequests() 
    { 
     /* Validation code 
     that will run for update_post action, 
     and update_post ONLY*/ 
    } 

    public function validateCreateRequests() 
    { 
     /* Validation code that will run for 
      create_post action, and 
      create_post ONLY.*/ 
    } 

    public __construct(Request $request) 
    { 
     $route_details = $this->getControllerAction($request); 

     if($route_details['controller'] == 'postsController') 
     { 
      if($route_details['action'] == 'update_post') 
      { 
       $this->validateUpdateRequests(); 
      } 

      else if($route_details['action'] == 'update_post') 
      { 
       $this->validateCreateRequests(); 
      } 
     } 
    } 
} 

を。

再び、より良い方法は、ミドルウェアを使用することになり、そして、あなたのような、ルートでフィルタリングを指定する必要があります特定のアクションのためのミドルウェアを使用する:

Route::get('/route_to_my_action', '[email protected]') 
->middleware(['my_middleware']); 

の詳細について