Laravel,路由通配符过滤然后控制器
Posted
技术标签:
【中文标题】Laravel,路由通配符过滤然后控制器【英文标题】:Laravel, Routing Wildcards to filter and then controller 【发布时间】:2013-01-30 17:40:31 【问题描述】:我正在尝试从 URL 捕获通配符,然后首先将其传递给过滤器,然后路由到控制器。我不确定如何准确地绘制问题,但这是我迄今为止尝试过的。
Route::get('test/(:any?)', array('as' => 'testroute', 'uses' => 'test@result', 'before' => "test_filter:$1"));
Route::filter('test_filter', function($id = NULL)
if($id)
echo "This id is " . $id; // Prints "This id is $1"
);
和
Route::get('test/(:any?)', array('as' => 'testroute', function($id = NULL)
if($id)
echo "this id is " . $id; // Does not do anything
, 'uses' => 'test@result'));
基本上,我想检查是否有附加到 URL 的 id 并设置一个 cookie,如果有的话。但不管是哪种情况,无论是否附加任何 id,我都希望该路由由控制器处理。
我必须对这么多路由做同样的事情,所以我更喜欢过滤器之类的东西,而不是修改控制器的代码。
我知道我可以直接将通配符元素传递给闭包,或者我可以将它作为参数提供给任何控制器,但在这种情况下,我必须修改控制器代码,目前我不能.
我可以通过过滤器做到这一点吗?或任何其他我不必修改控制器代码的方式?
【问题讨论】:
【参考方案1】:尝试在之前传递匿名
Route::get('test/(:any?)',
array(
'as' => 'testroute',
'uses' => 'test@result',
'before' => "test_filter",
function($my_cookie_value)
// Set cookie here
)
);
取自here
【讨论】:
不,匿名函数不做任何事情。它只是应用过滤器,然后将路由转发到控制器。另外,我需要在过滤器或匿名闭包中获取通配符的值。 @Gufran 再次更新了代码,将匹配传递给 anon 函数,看看是否有效 不,它不做任何事情。看起来匿名函数只是被忽略了。顺便说一句,我已经阅读了 Laravel 文档的所有文档,显然这是不可能的。【参考方案2】:我会使用中间件 http://laravel.com/docs/5.1/middleware(或过滤旧 Laravel 版本)并将 route/s 添加到具有中间件的组中,如您在此处看到的 http://laravel.com/docs/5.1/routing#route-group-middleware。
中间件将在路由代码之前执行,您可以在其中添加逻辑来管理您的 cookie。
【讨论】:
谢谢。非常感谢,但这个问题已有 2.5 年历史。它通常会在问题下方显示发布日期,因此下次尝试检查日期。以上是关于Laravel,路由通配符过滤然后控制器的主要内容,如果未能解决你的问题,请参考以下文章