我有一个非常奇怪的问题。
在我的本地计算机(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 :(得分:0)
首先:始终定义您正在使用的Laravel的特定版本,以及执行所有内容的位置。
某些代码仅在生产时执行。如果您在app/start/artisan.php
或app/start/local.php
中定义了过滤器,则在环境设置为production
的服务器上执行应用程序时,它不会反映出来。如果您没有明确指定代码行的定义位置,我们将无法提供帮助。
最后但并非最不重要:尝试减少开发环境与生产环境之间的差异。我建议使用Vagrant,甚至可能使用Laravel Homestead。这样,您就可以在Windows上开发Laravel应用程序并在虚拟Ubuntu环境中运行。
希望这有帮助。
答案 1 :(得分:0)
用户Matt Burrow是对的。当环境被称为“测试”时,不会执行过滤器。我不得不把它改成不同的东西,以使它们工作。
答案 2 :(得分:0)
当您的应用程序处于测试阶段时模式,禁用路由过滤器。因为测试是为单元测试保留的。
我在issue
上找到了它