Laravel — параметры в фильтре и маршруты

У меня есть следующий код:

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 или как отправить «фильтр» в фильтр?

0

Решение

Ваша проблема, вероятно, в вашем 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);
});
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]