【发布时间】: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