Laravel 9 Undefined class 'MainController' once uncommented controller namespace in RouteServiceProvider

zed5wv10  于 2023-05-01  发布在  其他
关注(0)|答案(3)|浏览(137)

我有一个Laravel 9的新安装,我试图在RouteServiceProvider中取消注解控制器命名空间。php.但是在我的API路由抛出一个错误:

Undefined class 'MainController'

我的控制器正确地放置在此命名空间下。

App\Http\Controllers

api.php文件是这样的。

Route::group(['prefix' => '/main'], function () {
Route::get('/', [MainController::class, 'index']);
});

控制器文件是这样的。

<?php

namespace App\Http\Controllers;

class MainController extends Controller
{
  public function index()
  {
    return response()->json(['status'=>200,'message'=>'success']);
  }
}

如果我将控制器文件导入API路由文件,它会正常工作。

sqxo8psd

sqxo8psd1#

它仍然可以工作,只需添加以下内容到您的RouteServiceProvider。它已从最新版本中删除,但您可以重新添加。

/**
 * The controller namespace for the application.
 *
 * When present, controller route declarations will automatically be prefixed with this namespace.
 *
 * @var string|null
 */
protected $namespace = 'App\\Http\\Controllers';

然后,使您的 Boot 方法如下所示。

/**
 * Define your route model bindings, pattern filters, and other route configuration.
 *
 * @return void
 */
public function boot()
{
    $this->configureRateLimiting();

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

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

这就是你需要做的,然后它会再次工作。

4jb9z9bj

4jb9z9bj2#

在路由文件Web中使用此。PHP
使用App\Http\Controller\MainController;
Route::get('/',[MainController::class,'index']);

egdjgwm8

egdjgwm83#

如果您在RouteServiceProvider中替换此代码。PHP

protected $namespace = 'App\\Http\\Controllers';
  
  public function boot()
    {
        $this->configureRateLimiting();
    
        $this->routes(function () {
            Route::middleware('api')
                ->prefix('api')
                ->namespace($this->namespace)
                ->group(base_path('routes/api.php'));
    
            Route::middleware('web')
                ->namespace($this->namespace)
                ->group(base_path('routes/web.php'));
        });
    }

你在你的网站上使用了旧的方法。php,像这样:

Route::group(['prefix'=>'/', 'namespace'=>'Frontend'], function(){
   Route::get('/', 'FrontendController@getIndex');
});

那就行

相关问题