2014-10-17 6 views
0

У меня очень странная проблема.Фильтр Laravel не выполнен

На моей локальной машине (Windows 8, XAMPP) фильтры Laravel работают так, как должны, но на сервере они этого не делают. (Ubuntu с Apache).

Route::filter('test_filter', function($request) { 
    echo 'Inside filter<br />'; 
}); 

Route::get('test_server2', array('before' => 'test_filter', function() { 
    return 'After filter<br />'; 
})); 

Когда я бегу это от моего локального сервера, выход:

Внутри фильтра
После фильтра

Когда я запускаю тот же сценарий из сети, я получаю :

После фильтра

Как вы можете видеть, фильтр не применяется. Они никогда не исполняются. Это не случайная или временная вещь.

Я заметил эту проблему в большом приложении, которое у меня есть. Я создал этот простой код, чтобы проверить, работает ли основной материал, но это не так.

Кто-нибудь знает, почему фильтры не могут быть выполнены?

Я проверил классы маршрутизации в исходном коде Laravel, и я не нашел ничего, что могло бы помочь решить мою проблему.

+0

ли у определили фильтры в 'приложение/filters.php'? Вы определили какие-либо фильтры для локальной разработки или производства в отдельных файлах? –

+1

Убедитесь, что вы не работаете в среде тестирования, поскольку по умолчанию все фильтры отключены. –

+0

Мэтт Берроу, да, я работаю в среде тестирования. Почему фильтры по умолчанию отключены? Как я могу включить их? – woodgate

ответ

0

Во-первых: всегда определяйте, какую конкретную версию Laravel вы используете, и где все выполнено.

Некоторые коды выполняются только на производстве. Если вы определили свой фильтр в app/start/artisan.php или app/start/local.php, он не будет отображаться при выполнении вашего приложения на сервере с окружением, установленным на production. Мы не можем помочь, если вы точно не определяете, где определены ваши строки кода.

Последнее, но не менее важное: попытайтесь уменьшить различия между средой разработки и производственной средой. Я рекомендую использовать Vagrant и, возможно, даже Laravel Homestead. Таким образом, вы можете разрабатывать приложения Laravel в Windows и запускать виртуальную среду Ubuntu.

Надеюсь, это поможет.

+0

Ну, я использую Laravel 4.2, а код находится внизу bottom.php, поэтому его нужно выполнять повсюду. – woodgate

0

Пользователь Matt Burrow был прав. Фильтры не выполняются, когда среда называется «тестирование». Мне пришлось изменить его на что-то другое, чтобы заставить их работать.

0

Когда ваше приложение находится в режиме тестирования, фильтры маршрутов отключены. Потому что тестирование зарезервировано для Unit Testing.

Я нашел его на этом issue

Смежные вопросы