Laravel 控制器 class 的问题

Problems with Laravel Controller class

我知道这个问题已经被问过几次了,但是 none 的答案对我有用,这就是我再次问这个问题的原因。

我想在 Laravel 中创建一个小网站,我创建了一个路由和一个控制器,但是当我尝试在 url 中访问它时,我得到这个错误:

Illuminate\Contracts\Container\BindingResolutionException
Target class [Admin\PlanController] does not exist.

这是我的 web.php:

use Illuminate\Support\Facades\Route;


Route::get('admin/plans', 'Admin\PlanController@index')->name('plans.index');

Route::get('/', function () {
    return view('welcome');
});

这是我的PlanController.php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class PlanController extends Controller
{
    public function index(){
        return view('admin.pages.plans.index');
    }
}

如果有任何帮助,这是我的 RouteServiceProvider.php

    protected $namespace = 'App\Http\Controllers';

    public function boot()
    {
        $this->configureRateLimiting();

        $this->routes(function () {
            Route::prefix('api')
                ->middleware('api')
                ->namespace($this->namespace)
                ->group(base_path('routes/api.php'));

            Route::middleware('web')
                ->namespace($this->namespace)
                ->group(base_path('routes/web.php'));
        });
    }

如果您使用 Laravel 8,最好使用新的路由语法,如下所示:

use App\Http\Controllers\Admin\PlanController;

Route::get('/admin/plans', [PlanController::class, 'index'])->name('plans.index');

确保控制器在正确的目录中app/Http/Controllers/Admin

您的代码似乎一切正常。确认控制器的目录必须是

app\Http\Controllers\Admin

或进行更改

$this->routes(function () {
        Route::middleware('web')
            ->namespace('App\Http\Controllers')
            ->group(base_path('routes/web.php'));

没有在此处使用获取命名空间值作为 RouteServiceProvider.php 中的变量。

您可以在路由中描述完整的命名空间;

Route::get('admin/plans','App\Http\Controllers\Admin\PlanController@index')->name('plans.index');