Laravel 10 - 类“PhotoController”不存在

问题描述 投票:0回答:1

我使用的是 Laravel 10,这段代码位于我的 web.php 文件中

...
Route::resource('photos', PhotoController::class);
....

它会生成以下路线列表:

photos ............................ photos.index › Admin\PhotoController@index  
photos ............................ photos.store › Admin\PhotoController@store  
photos/create ..................... photos.create › Admin\PhotoController@create  
photos/{photo} .................... photos.show › Admin\PhotoController@show  
photos/{photo} .................... photos.update › Admin\PhotoController@update  
photos/{photo} .................... photos.destroy › Admin\PhotoController@destroy  
photos/{photo}/edit ............... photos.edit › Admin\PhotoController@edit 

一切正常。现在,我想通过身份验证来保护此页面,并且我使用此代码

Route::prefix('admin')->middleware('auth')->group(function () {
   Route::get('photos', PhotoController::class);
});

我收到此错误:

  Target class [PhotoController] does not exist.

所以我添加:->namespace('App\Http\Controllers\Admin')

Route::prefix('admin')->namespace('App\Http\Controllers\Admin')->middleware('auth')->group(function () {
   Route::resource('photos', PhotoController::class);
});

现在网站可以工作了,但是命令 php artisan route:list 说:

 Class "PhotoController" does not exist 

我必须指定:

use App\Http\Controllers\Admin\PhotoController;

问题是..哪个是正确的方法?使用命名空间还是用 ->namespace() 表示?

php laravel namespaces laravel-10
1个回答
0
投票

最佳实践是在顶部导入命名空间

use App\Http\Controllers\Admin\PhotoController;

这就是 Laravel 从旧字符串语法转变的原因(它仍然受支持,但不再是 Laravel 团队的最佳实践):

Route::get('/action', 'SomeController@action')

新语法(从 Larave 8 开始支持):

use App\Http\Controllers\Path\SomeController;

Route::get('/action', [SomeController::class, 'action'])

查看 Laravel 控制器文档示例 herehere

这样做的好处是:

  • 清晰易读
  • 能够使用控制器命名空间,因此无需像
    ->namespace('...')
    那样链接或使用它。
    
        
© www.soinside.com 2019 - 2024. All rights reserved.