【发布时间】:2018-06-22 17:23:27
【问题描述】:
我的 routes/web.php 中有以下代码
Route::namespace('Admin')->middleware(['admin'])->group(function() {
Route::get('/posts', 'PostController@index');
});
Route::namespace('User')->middleware(['user'])->group(function() {
Route::get('/posts', 'PostController@index');
});
我希望在这两种情况下都使用相同的 uri“/posts”,并将角色逻辑(管理员、用户)排除在控制器之外,但是,在这种情况下,当我请求路由“/posts”时总是响应与最后一个。
我似乎无法在这里找到我所缺少的信息。
【问题讨论】:
-
我认为您要做的基本上是为同一条路线定义两个控制器。这没有任何意义。在你的情况下,两种情况下的控制器是相同的并不重要——Laravel 会假设你“改变了主意”并希望
/posts成为“用户”命名空间中的处理程序。我相信你应该使用 2 条不同的路线。 -
所以类似下面的建议 - /admin/posts 和 /user/posts?真的没有更干净的方法来区分这两种逻辑吗?
-
我刚刚意识到您可能正在为这两个操作使用 不同 控制器(两个不同的命名空间:
Admin/PostController和User/PostController)。因此,通过不同的路线将它们分开很有意义,我认为这是唯一的解决方案。当你为同一个 URI 定义了两组不同的中间件时,Laravel 应该如何根据 URI 本身知道使用哪个中间件? :) -
我的想法是,当中间件通过时,请求将进入相应的路由组,所以如果假设“管理员”中间件没有通过,它就不会进入该组并尝试下一个。跨度>
-
真的没有办法我可以在两个不同的事情上重复使用相同的 URI 而不必诉诸于方法内部的检查吗?
标签: laravel laravel-5 laravel-5.6