Php 如何在Laravel中调用特定路线的自定义检查

Php 如何在Laravel中调用特定路线的自定义检查,php,laravel,laravel-routing,Php,Laravel,Laravel Routing,假设我的Laravel routes.php中有多条路由,如- Route::post( 'createClan',array('uses'=>'MyClan@createClan')); Route::post( 'joinClan',array('uses'=>'MyClan@joinClan')); Route::get( 'myclan', array( 'as' => 'myclan' , 'uses' => 'MyClan@myclan' )); Route:

假设我的Laravel routes.php中有多条路由,如-

Route::post( 'createClan',array('uses'=>'MyClan@createClan'));
Route::post( 'joinClan',array('uses'=>'MyClan@joinClan'));
Route::get( 'myclan', array( 'as' => 'myclan' , 'uses' => 'MyClan@myclan' ));
Route::get( 'clanDetails', array( 'as' => 'clanDetails' , 'uses' => 'MyClan@clanDetails' ));
Route::get( 'myclanDefault', array('as' => 'myclanDefault' , 'uses' => 'MyClan@myclanDefault' ));
我有一个名为“Common”的控制器,在这个Common中有一个“ValidateRoute”函数,如下所示-

public function ValidateRoute($UserId, $form_name){

switch ($form_name)
         {
             case 'createJoin'://Create/Join Clan Menu Option.
                $createJoin=TRUE;
                $clans=  Userclanmapping::where('user_id','=',$UserId)->where('active','=',1)->get(array('clan_id'));
                foreach($clans as $clan)
                {
                    $createJoin=FALSE;
                }
                    return $createJoin;
         }

     }
我的问题是,我想在调用该路由之前调用该函数。如果函数只返回true,那么我可以打开该路由,但是如果函数返回false,我应该被移动到另一个路由,或者我应该得到一条类似route not found的消息

简而言之,我正在尝试对每条路线应用自定义检查。只有在满足该条件的情况下,才能访问路线

我试过这个密码-

Route::get( 'myclanDefault', array( 'before'=>'common:ValidateMenuOptions(Session::get(\'userid\'),\'createJoin\'))','as' => 'myclanDefault' , 'uses' => 'MyClan@myclanDefault' ));

但这不起作用。

您可以使用以下类似的方法对每条路线使用
路线过滤器

// In filters.php
Route::filter('myclanDefaultFilter', function($route, $request){
    // ...
    if(someCondition) {
        return Redirect::route('routeName');
    }
});
Route::get(
    'myclanDefault',
    array(
        'before' => 'myclanDefaultFilter',
        'as' => 'myclanDefault',
        'uses' => 'MyClan@myclanDefault' 
    )
);
App::before(function($request){
    // This event will fire for every route
    // before they take any further action
});
然后像这样声明
路线

// In filters.php
Route::filter('myclanDefaultFilter', function($route, $request){
    // ...
    if(someCondition) {
        return Redirect::route('routeName');
    }
});
Route::get(
    'myclanDefault',
    array(
        'before' => 'myclanDefaultFilter',
        'as' => 'myclanDefault',
        'uses' => 'MyClan@myclanDefault' 
    )
);
App::before(function($request){
    // This event will fire for every route
    // before they take any further action
});
现在,在将
myclanDefault
分派到操作之前,将首先运行
myclanDefaultFilter
筛选器,您可以根据特定条件从该筛选器重定向

此外,您还可以使用如下方式为所有路由在事件之前声明全局

// In filters.php
Route::filter('myclanDefaultFilter', function($route, $request){
    // ...
    if(someCondition) {
        return Redirect::route('routeName');
    }
});
Route::get(
    'myclanDefault',
    array(
        'before' => 'myclanDefaultFilter',
        'as' => 'myclanDefault',
        'uses' => 'MyClan@myclanDefault' 
    )
);
App::before(function($request){
    // This event will fire for every route
    // before they take any further action
});