我正在与Laravel 8合作开发我的项目。我制作了一个名为BackendController
的控制器,并添加了此index()
方法来调用刀片:
public function index()
{
return view('website.backend.dashboard.index');
}
然后在web.php
上添加以下路线:
Route::get('/dashboard', 'BackendController@index');
但是当我转到/dashboard
时,它说:
lluminate \ Contracts \ Container \ BindingResolutionException 目标类[BackendController]不存在。
我不知道为什么打印此消息,因为Controller已经存在!所以,如果您知道如何解决,请帮助我...
谢谢。
答案 0 :(得分:2)
Laravel 8已更新其路由。
该文件已记录在案,请查找Routing Namespace Updates
在新的Laravel 8.x应用程序中,应该使用标准PHP可调用语法定义控制器路由定义;
use App\Http\Controllers\UserController;
Route::get('/users', [UserController::class, 'index']);
答案 1 :(得分:2)
最后,您应该像这样定义路线; Route::get('/dashboard', [\App\Http\Controllers\BackendController::class, 'index'])
。
更具体些;
在Laravel的早期版本中,RouteServiceProvider
包含一个$namespace
属性。该属性的值将自动添加到控制器路由定义的前缀以及对action
helper / URL::action
方法的调用。在Laravel 8.x中,此属性默认为null。这意味着Laravel不会自动命名空间前缀。因此,在新的Laravel 8.x应用程序中,应该使用标准的PHP可调用语法来定义控制器路由定义:
use App\Http\Controllers\UserController;
Route::get('/users', [UserController::class, 'index']);
[从Laravel Docs复制。请参阅https://laravel.com/docs/8.x/releases中的“路由命名空间更新”部分
答案 2 :(得分:2)
将其更改为:
use App\Http\Controllers\BackendController;
Route::get('/dashboard', [BackendController::class, 'index']);
由于Laravel routing已更改。
答案 3 :(得分:1)
使用以下语法:Route::get('/dashboard', [BackendController::class, 'index'])->name('backend.index');
请参阅laravel docs
答案 4 :(得分:1)
在Laravel的早期版本中,RouteServiceProvider
包含一个$namespace
属性。该属性的值将自动添加到控制器路由定义的前缀和对action
辅助方法/
URL::action
的调用中。在Laravel 8.x中,此属性默认为null。这意味着Laravel不会自动命名空间前缀。 releases#laravel-8
因此,请尝试以下操作:
use App\Http\Controllers\BackendController;
Route::get('/dashboard', [BackendController::class, 'show'])->name('backend.index');