Laravel 5.2 中具有不同控制器的同一级别的动态路由

Dynamic routes on same level in Laravel 5.2 with different controllers

我有一个ProfileController和一个CategoryController

我想通过以下路径显示我的用户的个人资料:

my.domain.com/firstname.lastname
my.domain.com/firstname2.lastname2
...

就像 Facebook 正在做的那样。因此,我想在我的 ProfileController 中处理这个问题,所以我最终得到了这样的路线:

Route::get('/{userSlug}', array('uses' => 'ProfileController@getProfile'));

没问题,而且工作正常。但现在我想像这样显示我的类别:

my.domain.com/category-1
my.domain.com/category-2
...

问题是,我会做这样的路线:Route::get('/{categorySlug}', array('uses' => 'CategoryController@getCategory'));但是配置文件已经使用了这条路线。

我知道我可以只使用一个控制器并在那里检查 slug 是 userSlug 还是 categorySlug,但我真的想将配置文件逻辑从类别逻辑中分离到它们自己的控制器中。

此处的最佳做法是什么?

如果您的用户路由总是采用/firstname.lastname的形式,您可以尝试Regular Expression Constraints:

Route::get('/{userSlug}', array('uses' => 'ProfileController@getProfile'))
        ->where('name', '[a-z]+\.[a-z]+');

然后,按照您的包罗万象的类别路线进行跟进。但是,您最好为您的类别网址添加前缀(例如 /category/category-1)。