У меня есть следующий код:
filters.php
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);
});
Других решений пока нет …