Php 如何在Laravel中调用特定路线的自定义检查
假设我的Laravel routes.php中有多条路由,如-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:
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
});