在 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 将多个过滤器应用于一整套路由?的主要内容,如果未能解决你的问题,请参考以下文章

我可以在刀片模板 laravel 5 中使用请求路径 URI 吗?

如何在 switch 语句中使用 laravel 模型运行多个 Where 子句

如何在 laravel 中使用查询生成器根据 id 从多个表中获取数据

laravel 在apache或nginx的配置

Laravel 6:如何将多个 where 子句添加到关系中

如何使用phpunit在具有动态URI的laravel中测试REST api