Laravel 8:目标类别不存在

时间:2020-10-12 07:33:26

标签: php laravel routes controller laravel-8

我正在与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已经存在!所以,如果您知道如何解决,请帮助我...

谢谢。

5 个答案:

答案 0 :(得分:2)

Laravel 8已更新其路由。
该文件已记录在案,请查找Routing Namespace Updates

部分

在新的Laravel 8.x应用程序中,应该使用标准PHP可调用语法定义控制器路由定义;

use App\Http\Controllers\UserController;

Route::get('/users', [UserController::class, 'index']);

新文档在这里; https://laravel.com/docs/8.x/routing#basic-routing

答案 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');