Laravel 4 - 过滤后忽略

时间:2014-12-16 15:30:13

标签: laravel laravel-4

说我有以下路线:

    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表上的增量也会执行两次。我怎么能忽视"对于案例的后筛选选项是错误的?当然,一种可能的解决方案是验证过滤器函数中的选项,但我不想复制代码(这只是一个简单的例子,但如果验证选项函数涉及更多的话,事情会变得很难看代码和可能的一堆数据库查询。)

1 个答案:

答案 0 :(得分:0)

查看代码,您可以在更正选项后跳过Redirect,然后继续执行此功能。在更正选项后,我没有看到重定向的原因。这也将解决您关于after过滤器被调用两次的问题。