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 路由 - 如果条件不满足,则可以跳过路由的主要内容,如果未能解决你的问题,请参考以下文章

条件满足后,私有路由不重定向

Laravel 4 条件路由过滤器

Laravel 5.4 路由器中的条件设置控制器

laravel 访问不存在的路由跳转问题!(异常处理)

ospf建立邻居关系必须有的哪4个条件

php框架 laravel 多重条件查询。对数据库查询,在满足日期范围查询的同时在满足一个或几个条件查询。