【问题标题】:Route calls wrong controller method路由调用错误的控制器方法
【发布时间】:2020-11-18 00:21:30
【问题描述】:

在我的 Laravel 7 项目中,我有两个控制器。一个用于前端页面,一个用于后端页面。

路由定义如下:

<?php

use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get( '/', 'PageController@index' );
Route::get( '/login', 'Auth\LoginController@showLoginForm' );
Route::get( '/logout', 'Auth\LoginController@logout' );
Route::get( '/register', 'Auth\RegisterController@showRegistrationForm' );
Route::get( '/{slug}', 'PageController@show' );


Auth::routes();

Route::get( '/admin', 'HomeController@index' )->name( 'home' );

但是,当我尝试访问管理路由时,它使用的是 pageController@show 方法而不是 homeController@index,如下所示:

我尝试使用前缀为“admin”的组,然后像 admin/dashboard 这样的页面使用正确的控制器,但自身的管理路由仍然没有。

我查看了多个路由文件示例,但它们似乎对我不起作用。

我怀疑这与我使用动态路由有关?但是,所有其他路线都运行良好,所以我在这里没有真正看到问题......

我该如何解决这个问题?

【问题讨论】:

  • 首先看到/{slug} 所以它认为管理员是一个蛞蝓。在 slug 之前移动您的管理员代码
  • 是的,这是一个排序/特异性问题。 /{slug} 将捕获那里的所有内容,因此您需要将管理路由放在它之前。
  • 其他的cmets是对的,但是为了以后参考:请直接发布您的代码,而不是作为图像。
  • @KurtFriars 现在正在尝试。如果是这样,我会觉得很傻
  • @MichaelRotteveel 100% 会。路由尝试按从上到下的顺序进行匹配,当一个匹配时它使用该路由。如果没有匹配,它将尝试回退到类似的路线。如果没有找到,404。

标签: php laravel laravel-routing laravel-7


【解决方案1】:

这是因为你在 "/admin" 之前定义了 "/{slug}" 并且它之前是匹配的。 如果你颠倒顺序,它应该可以工作。

【讨论】:

    猜你喜欢
    • 2018-06-10
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多