Laravel-过滤器和路由中的参数


Laravel - parameters in filter and routes

我有以下代码:

过滤器.pp

Route::filter('empty_cart', function () {
    if (empty(Cart::contents()) || Cart::totalItems() == 0) {
        return Redirect::to('');
    }
});  

routes.php

Route::group(array('before' => 'csrf','before' => 'detectLang','before' => 'empty_cart'), function () {
    Route::get('site/{slug}/cart', array('uses' => 'CartController@getCart'));
    Route::get('site/{slug}/cart/billing', array('uses' => 'CartController@getBilling'));
    Route::get('site/{slug}/login', array('uses' => 'UsersController@getLoginForm'));
});  

如果购物车是空的,我如何将用户重定向到"site/{$slug}"?我可以在filter.php中使用参数吗?或者我如何将"段塞"发送到过滤器?

您的问题可能在Route::group行中。您正在传递一个要运行的筛选器数组,但为每个单独的项提供相同的键。您应该在使用管道|:过滤之前对每个进行拆分

Route::group(array('before' => 'csrf|detectLang|empty_cart'), function () {
    // Your routes here
}

您在组中定义的路由只有在所有3个筛选器都通过时才有效,如果任何筛选器失败,您将得到404。如果您想在筛选器失败时实现某些操作,可以在路由文件中删除此筛选器,并在控制器的构造函数或其他地方实现它。

或者,您可以尝试在此组之后添加另一个不应用筛选器的路由,以便任何与筛选的路由不匹配的请求都将被此事件捕获。然后你就可以将重定向设置到位。

Route::group(array('before' => 'csrf|detectLang|empty_cart'), function () {
    Route::get('site/{slug}/cart', array('uses' => 'CartController@getCart'));
}
Route::get('site/{slug}/cart', 'YourController@yourAction');
// OR
Route::get('site/{slug}/cart', function($slug){
    return Redirect::to('/'. $slug);
});