2014-10-17 91 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'过滤器?您是否已经在单独的文件中为本地开发或生产定义了任何过滤器? – 2014-10-17 12:06:19

+1

确保您未在​​测试环境中工作,因为默认情况下所有筛选器都处于禁用状态。 – 2014-10-17 12:31:16

+0

Matt Burrow,是的,我正在测试环境中工作。为什么默认禁用过滤器?我如何启用它们? – woodgate 2014-10-22 07:38:08

回答

0

首先:总是定义你正在使用的Laravel的特定版本,以及执行的所有部分。

某些代码仅在生产时执行。如果您在app/start/artisan.phpapp/start/local.php中定义了过滤器,它将不会反映在环境设置为production的服务器上执行应用程序的时间。如果您没有完全指定您的代码行的定义位置,我们无法提供帮助。

最后但并非最不重要的:尽量减少开发环境和生产环境之间的差异。我推荐使用Vagrant,甚至可能还有Laravel Homestead。这样,您就可以在Windows上开发Laravel应用程序并在虚拟Ubuntu环境中运行。

希望这会有所帮助。

+0

好吧,我使用的是Laravel 4.2,代码位于routes.php的底部,所以它应该在任何地方执行。 – woodgate 2014-10-21 07:11:26

0

用户Matt Burrow是对的。当环境被称为“测试”时,过滤器不会执行。为了让他们工作,我不得不改变它到不同的地方。

0

当您的应用程序处于“测试”模式时,路由过滤器被禁用。因为测试是为单元测试保留的。

我发现这个issue