Php 如何在Laravel中创建具有无限子页面的路由?

Php 如何在Laravel中创建具有无限子页面的路由?,php,laravel,laravel-4,Php,Laravel,Laravel 4,是否有任何方法可以捕获子页面的无限级别URL。我的应用程序允许任何用户创建任何级别的子页面。在我的页面表中,我有parentID /{page}/{subpage} // this captures 2 level of pages /{page} // this captures 1 level of page 我想捕获从 site.com/food/health/fruit/red/apple到site.com/fruit/organge或site.com/grapes或site.com/

是否有任何方法可以捕获子页面的无限级别URL。我的应用程序允许任何用户创建任何级别的子页面。在我的页面表中,我有parentID

/{page}/{subpage} // this captures 2 level of pages
/{page} // this captures 1 level of page
我想捕获从

site.com/food/health/fruit/red/applesite.com/fruit/organgesite.com/grapessite.com/a/b/c/d/e/f/g/h/i/j等等


最有效的方法是什么?

当然有可能。您需要在斜杠
/
上分解捕获的页面,然后从那里开始

Route::any('{any}', function($pages)
{
    $pages = explode('/', $pages);

    // Do whatever...
})->where('any', '.*');
需要注意的几件事:

  • 这条路线应该排在最后一条,否则你将无法到达任何其他路线
  • 这绝对捕获了所有内容,如果页面不存在,您需要返回一个错误
  • 我在上面使用
    Route::any
    来捕获任何请求(
    POST
    GET
    ,等等),您可能希望将其限制为这些请求的子集,或者仅限于
    GET
    ,这取决于您
  • 正如下面的评论所指出的,您不能再使用
    URL::route
    帮助器,但仍然可以使用
    URL::to
    帮助器。这不应该是一个问题,因为很可能您正在数据库中存储这些动态页面,因此URI也应该存储在数据库中

  • +1,非常好的技巧,它只计算一个参数,但分解将其转换为数组。是的,它将所有参数捕获到单个字符串中,这就是为什么必须分解它才能获得单个页面参数的原因。这就是为什么必须最后定义它,否则它将在其他路由有机会之前匹配任何请求。先进先出。如果
    OP
    想要使用
    URL
    类创建路由怎么办?他将如何传递参数,这可能吗?可能不是因为路由不匹配。我想这是它的一个限制,您不能使用
    URL::route
    。但是,您仍然可以使用
    URL::to
    ,并且由于这些页面看起来是动态创建的,因此此类页面的URI很可能存储在数据库中,因此使用
    URL::to
    应该不会有问题。我将更新我的答案,并将其列为需要注意的事项。谢谢Jason,在此之后,我将有一个包含[食物、健康、水果、红色、苹果]等参数的数组。如何使用parentID从数据库中的多级或分层页面在控制器中创建URL结构?比如site.com/food/health/fruit/red/apple,其中食品是健康之母,健康是水果之母等等。我如何确保红色真的是苹果的母体,水果真的是红色的母体等等。