说我有以下路线:
Route::any('/door1/{options?}', array(
'as' => 'path',
'after' => 'somefilter',
'uses' => 'DoorController@path'
))
我的后过滤器有作业在DB表上递增一些值。过滤器看起来像这样:
Route::filter('somefilter', function($route, $request, $response, $action)
{
try
{
//...
IncrementDBTable();
//...
}
catch(Exception $e)
{
return Redirect::home();
}
});
至于控制器, 如果options参数有效,那么一切都很好,并调用一个特定的视图,否则选项被"更正"并执行重定向到同一路线:
public function path($options='option1,option2')
{
if( !this->isValidOptions($options) ) {
$options = this->correctOptions($options);
return Redirect::route( 'path', array(
'options' => $options
) );
}
// everything fine:
return View::make( 'door' );
}
我的问题是,对于选项错误的情况,后过滤器被调用两次,这意味着DB表上的增量也会执行两次。我怎么能忽视"对于案例的后筛选选项是错误的?当然,一种可能的解决方案是验证过滤器函数中的选项,但我不想复制代码(这只是一个简单的例子,但如果验证选项函数涉及更多的话,事情会变得很难看代码和可能的一堆数据库查询。)
答案 0 :(得分:0)
查看代码,您可以在更正选项后跳过Redirect
,然后继续执行此功能。在更正选项后,我没有看到重定向的原因。这也将解决您关于after
过滤器被调用两次的问题。