laravel 到多个控制器的高级路由

laravel advanced routing to multiple controllers

我在中间件中有这两条路由,因此它们位于所有其他路由之上

Route::get('{slug?}', array(
    'as' => 'homeIndex',
    'uses' => 'Modules\Pages\Controllers\Pages@index'
))->where('slug', '(.*)?');


Route::get('{company?}', array(
    'as' => 'companyProfile',
    'uses' => 'Modules\Company\Controllers\Profile@index'
))->where('company', '(.*)?');

我想要实现的是通过 homeIndex 路由所有页面,并通过 companyProfile 路由所有公司简介,所有这些都在第一部分。

页面工作正常,但公司简介我得到 404。

如果你在 facebook 上,它就像 facebook 一样。com/about如果你用你的唯一名称替换 about,你会得到你的个人资料,结果是关于页面。

有什么让它发挥作用的想法吗?

Facebook 有效,因为 about 是一条路线。这是可行的,因为您的唯一名称永远不能是 about。所以他们首先寻找 about 路线,如果该段不是 about,他们知道它可能是一个唯一的名称。

你的不同,因为你的应用程序不知道你的第一个细分市场是 slug 还是公司,所以你需要一些方法来区分它。如果您将所有内容重定向到一个函数,然后在该函数中执行一些查询或您需要做的任何事情来确定第一段是 slug 还是公司名称,然后适当地重定向它,它将起作用。

Laravel 从上到下读取路由。当您到达路线 /some-random-company 时,Laravel 不知道这是一家公司。它所知道的是它恰好与第一条路线匹配,因此它与您的公司一起击中了 slug 路线。因此,另一种解决方案是更新路由上的 wheres,这样 Laravel 就会知道传入的路由参数是 slug 还是公司,并且知道将请求路由到何处。

我不擅长正则表达式,我不知道你是怎么写的,或者你是否设置了任何关于公司名称可以或不可以包含的规则。您需要做的是弄清楚是否有任何地方可以准确地确定路线参数是 slug 还是 company。例如,如果它有一个或多个 -,它可能是一个 slug。

然后您必须编写一个正则表达式模式来查找多个 -,然后将该模式放入 slug 路由的 where 中。然后,如果路由参数是一家公司,并且它与正在寻找 - 中的一个或多个的模式不匹配,Laravel 将知道将此请求与公司路由匹配。

如果没有任何东西可以用来确定字符串是 slug 还是 company,则必须更新路由,使其看起来像 company/{company?}slug/{slug?},然后输出你的链接适当。这样 Laravel 就能确定将流量路由到哪里。