【问题标题】:Dynamic routes on same level in Laravel 5.2 with different controllers具有不同控制器的 Laravel 5.2 中同一级别的动态路由
【发布时间】:2016-11-30 08:45:47
【问题描述】:

我有一个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,但我真的想将配置文件逻辑与类别逻辑分离到它们自己的控制器中。

这里的最佳做法是什么?

【问题讨论】:

  • 您的类别 slug 实际上会是“category-1”和“category-2”等吗?
  • 不,实际上可以是任何文本。

标签: php laravel routing laravel-5.2 routeparams


【解决方案1】:

如果您的用户路由将始终采用/firstname.lastname 的形式,您可以尝试Regular Expression Constraints

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

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

【讨论】:

  • 谢谢,这正是我需要的。我不知道我可以在路由定义后面做一个“哪里”。我基本上是在寻找进入 ProfileController 的方法,检查 slug 是否是配置文件 slug,如果不是,则返回路由文件并采用下一个匹配路由并到达 CategoryController。但这似乎是不可能的。
猜你喜欢
  • 1970-01-01
  • 2016-10-18
  • 2013-09-24
  • 2016-03-29
  • 2017-04-05
  • 2016-10-03
  • 2017-07-19
  • 2016-06-04
  • 2019-10-26
相关资源
最近更新 更多