首页 > 解决方案 > Laravel 包开发 - 目标类 [ControllerName] 不存在

问题描述

我正在关注如何创建 laravel 包的教程。

我正在使用 Laravel v8.42.1 (PHP v7.4.3) 和 jetstream 包。

我一直在为我的包创建一个控制器,尝试通过 laraval 应用程序(<base-url/playground)连接到我的 url 时总是出现以下错误:

Target class [TestVendor\TestPackage\Http\Controllers\PlaygroundController] does not exist. 

TestVendor\TestPackage\src\routes.php 被主应用程序识别:

use TestVendor\TestPackage\Http\Controllers\PlaygroundController;
use Illuminate\Support\Facades\Route;

Route::get('/playground', [PlaygroundController::class, 'index']);

并从我的 ServiceProvider 类加载:

$this->loadViewsFrom(__DIR__.'/resources/views', 'playground');
loadRoutesFrom(__DIR__.'/routes.php');

我的命名空间通常也正确地写在我的包的 composer.json 中:

"autoload": {
    "psr-4": {
        "TestVendor\\TestPackage\\": "src/"
    }
},

我在 src/Http/Controllers/PlaygroundController.php 中有我的 PlaygroundController:

namespace TestVendor\TestPackage\Http\Controllers;

use Illuminate\Routing\Controller;

class PlaygroundController extends Controller
{

  public function index()
  {
    return view('playground::hello');
  }

}

该视图也在正确的包中。我正在使用https://github.com/Jeroen-G/laravel-packager来搭建我的包。是否有多个作曲家自动加载和作曲家更新。

似乎我的控制器在主应用程序中无法识别,我认为我的名称间距不正确?

我已经看过了:

标签: phplaravelpsr-4

解决方案


您已将控制器命名为:

namespace TestVendor\TestPackage\Http\Controllers;

尽管您在上面的行中说:

我在 src/Http/PlaygroundController.php 中有我的 PlaygroundController:

除非那是一个错字,否则您需要在Controllers下面添加一个目录Http并将您的目录放在PlaygroundController那里:

src/Http/Controllers/PlaygroundController.php

对于psr-4自动加载,您的文件夹结构和命名空间应该相互模仿。


推荐阅读