路由资源在 Laravel 8.x 中不工作
Route resource not working in Laravel 8.x
我对 Laravel 8.x 中的 Route::resource()
方法有疑问。
它 returns 的错误是:
Target class [Admin\App\Http\Controllers\Admin\ProfileController] does
not exist.
这是我在 routes/web 中的代码。php:
Route::prefix('admin')->namespace('Admin')->group(static function() {
Route::middleware('auth')->group(static function () {
//...
Route::resource('profile', ProfileController::class);
});
});
我找不到问题所在。
请使用下面的代码,您似乎正在使用 class 而未导入,因此首先您需要在 web.php 文件中导入 profilecontroller。
use App\Http\Controllers\Admin\ProfileController; ## insert path profilecontroller
Route::prefix('admin')->namespace('Admin')->group(static function() {
Route::middleware('auth')->group(static function () {
//...
Route::resource('profile', ProfileController::class);
});
});
终于在laravel 8.x upgarade guide中找到了答案。我用完整的命名空间向控制器名称发送了短信,而不是导入它。
Route::prefix('admin')->namespace('Admin')->group(static function() {
Route::middleware('auth')->group(static function () {
//...
Route::resource('profile', '\App\Http\Controllers\Admin\ProfileController');
});
});
我在使用 Laravel 7 最新版本时也遇到了同样的问题。看看我是怎么解决的:
首先在页面包含这个目录
enter image description here
使用 \App\Http\Controllers\Admin\ProfileController
然后调用完整版本的路由,包括 class这样的名称
Route::resource('profile', '\App\Http\Controllers\Admin\ProfileController');
这将自动为 ProfileController class 中定义的所有方法创建不同的路由。使用 TodoController 查看所附图片中的示例。
Route::resource('invoice','\App\Http\Controllers\InvoiceController');
所以这是一个问题的原因是 Laravel 8 删除了 RouteServiceProvider 上的默认命名空间。
如果您想使用 ProfileController::class
功能,您需要在 RouteProvider 中将 protected $namespace
重置为 null 以匹配基本代码。
否则它会将 $namespace 添加到您传递的 class 中。
所以改变
protected $namespace = null
然后从您的 routes.php 文件中删除 ->namespace('Admin')
确保您遵循了升级指南。从 v7 到 v8 发生了很多变化。
向 App/Providers/RouteServiceProvider.php
添加 $namespace
class RouteServiceProvider extends ServiceProvider
{
/**
* This namespace is applied to your controller routes.
*
* In addition, it is set as the URL generator's root namespace.
*
* @var string
*/
protected $namespace = 'App\Http\Controllers';
}
您还可以在这里找到更多答案:
运行 以下步骤用于清除路由缓存
php artisan route:clear
在 Laravel 8 中,首先,您必须像这样导入控制器,
use App\Http\Controllers\ProfileController;
然后使用资源,
Route::resource('profile', 'App\Http\Controllers\ProfileController');
如果您在 class、
中使用过它
Route::resource('profile',[ProfileController::class, 'classname']);
运行 php artisan route:list
,我遇到了同样的问题。
Target class [App\Http\Controllers\App\Http\Controllers\CourseController] does not exist.
就我而言,有效的方法是:
正在将资源从:Route::resource('courses', CourseController::class);
更改为 Route::resource('courses', 'CourseController');
我没有更改任何命名空间,我正在使用 laravel 7.2。
我对 Laravel 8.x 中的 Route::resource()
方法有疑问。
它 returns 的错误是:
Target class [Admin\App\Http\Controllers\Admin\ProfileController] does not exist.
这是我在 routes/web 中的代码。php:
Route::prefix('admin')->namespace('Admin')->group(static function() {
Route::middleware('auth')->group(static function () {
//...
Route::resource('profile', ProfileController::class);
});
});
我找不到问题所在。
请使用下面的代码,您似乎正在使用 class 而未导入,因此首先您需要在 web.php 文件中导入 profilecontroller。
use App\Http\Controllers\Admin\ProfileController; ## insert path profilecontroller
Route::prefix('admin')->namespace('Admin')->group(static function() {
Route::middleware('auth')->group(static function () {
//...
Route::resource('profile', ProfileController::class);
});
});
终于在laravel 8.x upgarade guide中找到了答案。我用完整的命名空间向控制器名称发送了短信,而不是导入它。
Route::prefix('admin')->namespace('Admin')->group(static function() {
Route::middleware('auth')->group(static function () {
//...
Route::resource('profile', '\App\Http\Controllers\Admin\ProfileController');
});
});
我在使用 Laravel 7 最新版本时也遇到了同样的问题。看看我是怎么解决的:
首先在页面包含这个目录
enter image description here
使用 \App\Http\Controllers\Admin\ProfileController
然后调用完整版本的路由,包括 class这样的名称
Route::resource('profile', '\App\Http\Controllers\Admin\ProfileController');
这将自动为 ProfileController class 中定义的所有方法创建不同的路由。使用 TodoController 查看所附图片中的示例。
Route::resource('invoice','\App\Http\Controllers\InvoiceController');
所以这是一个问题的原因是 Laravel 8 删除了 RouteServiceProvider 上的默认命名空间。
如果您想使用 ProfileController::class
功能,您需要在 RouteProvider 中将 protected $namespace
重置为 null 以匹配基本代码。
否则它会将 $namespace 添加到您传递的 class 中。
所以改变
protected $namespace = null
然后从您的 routes.php 文件中删除 ->namespace('Admin')
确保您遵循了升级指南。从 v7 到 v8 发生了很多变化。
向 App/Providers/RouteServiceProvider.php
添加 $namespace
class RouteServiceProvider extends ServiceProvider
{
/**
* This namespace is applied to your controller routes.
*
* In addition, it is set as the URL generator's root namespace.
*
* @var string
*/
protected $namespace = 'App\Http\Controllers';
}
您还可以在这里找到更多答案:
运行 以下步骤用于清除路由缓存
php artisan route:clear
在 Laravel 8 中,首先,您必须像这样导入控制器,
use App\Http\Controllers\ProfileController;
然后使用资源,
Route::resource('profile', 'App\Http\Controllers\ProfileController');
如果您在 class、
中使用过它Route::resource('profile',[ProfileController::class, 'classname']);
运行 php artisan route:list
,我遇到了同样的问题。
Target class [App\Http\Controllers\App\Http\Controllers\CourseController] does not exist.
就我而言,有效的方法是:
正在将资源从:Route::resource('courses', CourseController::class);
更改为 Route::resource('courses', 'CourseController');
我没有更改任何命名空间,我正在使用 laravel 7.2。