在 Laravel 中:如何根据 URI 将多个过滤器应用于一整套路由?

Posted

技术标签:

【中文标题】在 Laravel 中:如何根据 URI 将多个过滤器应用于一整套路由?【英文标题】:In Laravel: How to apply many filters to an entire set of routes based on their URI? 【发布时间】:2015-07-30 02:47:47 【问题描述】:

在 Laravel 框架中:文档 (route filter section) 说:

您还可以指定一个过滤器根据其 URI 应用于整个路由集。

Route::filter('admin', function()

    //
);

Route::when('admin/*', 'admin');

如果我有多个过滤器并且想根据它们的 URI 将它们全部应用到一整套路由上怎么办?我应该这样应用它们:

Route::when('admin/*', 'filter_1');
Route::when('admin/*', 'filter_2');
Route::when('admin/*', 'filter_3');

或者我可以将它们全部放在一个数组中并像这样应用它们:

Route::when('admin/*', array('filter_1', 'filter_2', 'filter_3'));

【问题讨论】:

您的问题可以使用一些问号。 你不能在你的情况下使用Route::group吗?然后使用教皇将过滤器应用于该集合? 两种方案都试一下,你自己回答。我很确定第一个会起作用。 @Mr.Blackus 第一个解决方案效果很好(来自文档),我的问题是:第二个解决方案是否与第一个解决方案完全一样? 看看github.com/Zizaco/entrust 【参考方案1】:

尝试后发现使用

Route::when('admin/*', array('filter_1', 'filter_2', 'filter_3'));

将执行相同的结果,所以是的,我可以使用上面的行而不是接下来的 3 行

Route::when('admin/*', 'filter_1');
Route::when('admin/*', 'filter_2');
Route::when('admin/*', 'filter_3');

并注意过滤器将分别应用,这意味着将首先应用filter_1,如果一切正常,将应用filter_2,依此类推。

【讨论】:

以上是关于在 Laravel 中:如何根据 URI 将多个过滤器应用于一整套路由?的主要内容,如果未能解决你的问题,请参考以下文章