Laravel 4 路由 - 如果条件不满足,则可以跳过路由
Posted
技术标签:
【中文标题】Laravel 4 路由 - 如果条件不满足,则可以跳过路由【英文标题】:Laravel 4 routing - the ability to skip a route if conditions are not met 【发布时间】:2014-12-19 00:37:10 【问题描述】:所以我们在数据库中有大量内容,我们称之为文章。文章的路径从应用程序根目录开始,并且可以包含斜杠。所以我们想搜索数据库,看看我们是否匹配了一篇文章,如果不匹配,则跳过该路由并给其他路由响应的机会。
在 Sinatra(我相信它启发了 Laravel 中的路由)中,您可以选择 pass to the next route。可能是这个让我误入歧途。
Route::get( 'uri', function( URI $uri )
// check database, if we find a record we'll need to pass it to the appropriate controller
// we'll have a class that handles this responsiblity
// pass if we don't find anything
)->where('uri', '.*');
Route::get( 'other/page', 'OtherController@sayHello' );
问题Allow skip the route based on conditions #1899 谈到了这个,虽然我看不到过滤器是如何解决这个问题的,但它们会简单地拦截并给你一个停止路由执行的机会(抛出异常,重定向到特定的路由等),你不能return FALSE;
没有错误。有一个example chaining a condition
method to a route,虽然这个方法似乎不存在(在 4.2 中)。
有什么想法吗?
除此之外,我们还在考虑将这个逻辑包含在一个包中,以便它可以在应用程序之间共享,并且想知道您是否可以影响包提供的路由的执行顺序?
【问题讨论】:
【参考方案1】:您可以拥有一组路由,这些路由包含在与其匹配的所有路由中。如果该组失败,则跳到下一部分。
Route::group(array('before' => 'auth'), function()
Route::get('/', function()
// Has Auth Filter
);
Route::get('user/profile', function()
// Has Auth Filter
);
);
http://laravel.com/docs/4.2/routing
【讨论】:
我已阅读文档,但发现它缺乏灵活性。例如,我们可能无法创建此嵌套,或者想要创建。如果我们希望这条路由在一个包中独立发生,然后如果它无关的话,它会传递到下一条路由(在应用程序中)。以上是关于Laravel 4 路由 - 如果条件不满足,则可以跳过路由的主要内容,如果未能解决你的问题,请参考以下文章