В Laravel, Как применить фильтр ко всем маршрутам с помощью метода Route :: when ()?

В Laravel 4 я обнаружил, что если я хочу прикрепить before фильтровать все маршруты веб-сайта, я могу использовать App::before() метод, который существует в app/filters.php файл, как это:

App::before(function($request)
{
// my code here..
});

А потому что я обнаруженный что я не могу использовать Route::currentRouteName() метод внутри App::before() метод, я искал другой способ сделать это, и я обнаружил, что я могу создать собственный фильтр в app/filters.php файл, как это:

Route::filter('my_filter_name', function()
{
// my code to apply on all routes..
});

И в app/routes.php файл, я написал следующий шаблон на основе фильтра:

Route::when('*', 'my_filter_name');

И он сделал именно то, что я хочу, и я могу использовать Route::currentRouteName() метод, как я хочу в моем собственном фильтре. Но я заметил (и поправьте меня, если я ошибаюсь), что Route::when() метод рассмотрения my_filter_name как before фильтр. Теперь я хочу знать: как это использовать Route::when() метод применения before и / или after фильтры?

0

Решение

Вы можете сделать это

В ваших маршрутах

Route::group(array('before/after' => 'my_filter_name'), function()
{
Route::get('/', function()
{
// Has my_filter_name Filter
});

Route::get('another', function()
{
// Has my_filter_name Filter
});
});
2

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

К сожалению, Laravel не дает возможности добавить шаблон после фильтра с Route::when(), Правильный способ сделать это — обернуть ваши маршруты в группу:

Route::group(array('after' => 'my_filter_name'), function(){
// routes
});

Если вы действительно не можете использовать группу, есть другое решение. Это немного глупо, хотя …

После регистрации всех маршрутов (обычно внизу routes.php) вы можете добавить этот код, который проходит по всем маршрутам и добавляет фильтр после каждого маршрута:

foreach(Route::getRoutes() as $route){
$route->after('my_filter_name');
}
1

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