【问题标题】:Use different route namespace based on middleware in Laravel在 Laravel 中根据中间件使用不同的路由命名空间
【发布时间】: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/PostControllerUser/PostController)。因此,通过不同的路线将它们分开很有意义,我认为这是唯一的解决方案。当你为同一个 URI 定义了两组不同的中间件时,Laravel 应该如何根据 URI 本身知道使用哪个中间件? :)
  • 我的想法是,当中间件通过时,请求将进入相应的路由组,所以如果假设“管理员”中间件没有通过,它就不会进入该组并尝试下一个。跨度>
  • 真的没有办法我可以在两个不同的事情上重复使用相同的 URI 而不必诉诸于方法内部的检查吗?

标签: laravel laravel-5 laravel-5.6


【解决方案1】:

prefix 用于 adminuser 的不同路由

/管理员/帖子

Route::group(['namespace' => 'Admin','middleware=>'admin','prefix' => 'admin'],function() {
    Route::get('/posts', 'PostController@index');
});

/用户/帖子

Route::group(['namespace' => 'User','middleware=>'user','prefix' => 'user'],function() {
    Route::get('/posts', 'PostController@index');
});

【讨论】:

  • 没有其他方法可以将这两条路线分开,还是使用单个控制器并在每种方法中进行检查?
【解决方案2】:

你可以试试这个

Route::group(['prefix'=>'admin','middleware'=>'admin'],function (){
        Route::get('/posts',['uses'=>' PostController@posts','as'=>'posts.index']);


});


Route::group(['prefix'=>'user','middleware'=>'user'],function (){
        Route::get('/index',['uses'=>' PostController@posts','as'=>'posts.index']);


});

【讨论】:

    猜你喜欢
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 2021-05-12
    • 2015-07-05
    • 2017-12-13
    • 2016-11-14
    • 2016-12-20
    相关资源
    最近更新 更多