Laravel 8 包开发 - 路由目标 class 不存在

Laravel 8 package development - Route Target class does not exist

我知道标题主题听起来与其他问题相似,但我在 Whosebug 上搜索了很多主题,none 解决了我的问题。

我目前正在开发Laravel^8.12下的包,注册我的路由的函数内容如下:

protected function registerRoutes(): void
{
    Route::prefix('workflowmakr')
        ->namespace('AlvariumDigital\WorkflowMakr\Http\Controllers')
        ->as('workflowmakr.')
        ->middleware(config('workflowmakr.routes_middleware'))
        ->group(__DIR__ . '/../routes/api.php');
}

下面是 routes/api.php 文件的内容:

<?php

use Illuminate\Support\Facades\Route;

Route::resource('actions', 'ActionController')->except(['created', 'edit']);
Route::resource('scenarios', 'ScenarioController')->except(['created', 'edit']);
Route::resource('statuses', 'StatusController')->except(['created', 'edit']);
Route::resource('transitions', 'TransitionController')->except(['created', 'edit']);

为了更好地了解项目架构,下面是包含正在开发的包的 packages 文件夹的屏幕截图:

最后,下面是 composer.json 声明我的包裹:

...
   "extra": {
        "laravel": {
            "providers": [
                "AlvariumDigital\WorkflowMakr\WorkflowMakrServiceProvider"
            ]
        }
    },
    "autoload": {
        "psr-4": {
            "App\": "app/",
            "Database\Factories\": "database/factories/",
            "Database\Seeders\": "database/seeders/",

            "AlvariumDigital\WorkflowMakr\":  "packages/AlvariumDigital/WorkflowMakr/src/"
        }
    },
...

当我执行命令 php artisan route:list 查看我所有的路线时,我得到了这个错误:

$> php artisan route:list

   Illuminate\Contracts\Container\BindingResolutionException 

  Target class [AlvariumDigital\WorkflowMakr\Http\Controllers\ActionController] does not exist.

  at D:\Films\R_D\Laravel packages\workflow-makr\vendor\laravel\framework\src\Illuminate\Container\Container.php:832
    828▕
    829▕         try {
    830▕             $reflector = new ReflectionClass($concrete);
    831▕         } catch (ReflectionException $e) {
  ➜ 832▕             throw new BindingResolutionException("Target class [$concrete] does not exist.", 0, $e);
    833▕         }
    834▕
    835▕         // If the type is not instantiable, the developer is attempting to resolve
    836▕         // an abstract type such as an Interface or Abstract Class and there is

  1   [internal]:0
      Illuminate\Foundation\Console\RouteListCommand::Illuminate\Foundation\Console\{closure}(Object(Illuminate\Routing\Route))

  2   D:\Films\R_D\Laravel packages\workflow-makr\vendor\laravel\framework\src\Illuminate\Container\Container.php:830
      ReflectionException::("Class AlvariumDigital\WorkflowMakr\Http\Controllers\ActionController does not exist")

编辑

以下是 ActionController 文件的内容:

<?php

namespace AlvariumDigital\WorkflowMakr\Http\Controllers;

use AlvariumDigital\Models\Action;
use AlvariumDigital\WorkflowMakr\Helpers\Constants;
use Illuminate\Routing\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class ActionController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function index()
    {
        $query = Action::query();
        if (config('workflowmakr.pagination_size') == -1) {
            return response()->json($query->get(), 200);
        }
        return response()->json($query->paginate(config('workflowmakr.pagination_size')), 200);
    }

   // ...
}

编辑 2

包内容composer.json文件:

{
    "name": "AlvariumDigital/WorkflowMakr",
    "description": "Generalize the management of your workflows",
    "type": "library",
    "license": "MIT",
    "authors": [
        {
            "name": "Alvarium Digital",
            "email": "contact@alvariumdigital.com",
            "homepage": "http://www.alvariumdigital.com",
            "role": "Corporate"
        },
        {
            "name": "EL OUFIR Hatim",
            "email": "heloufir@alvariumdigital.com",
            "homepage": "https://www.linkedin.com/in/eloufirhatim/",
            "role": "Developer"
        }
    ],
    "support": {
        "email": "heloufir@alvariumdigital.com"
    },
    "minimum-stability": "dev",
    "require": {}
}

我做错了什么或不完整吗? 如果需要,您可以询问更多详细信息。

谢谢

您的目录结构有误。你有 PSR4 自动加载加载 src 目录作为命名空间。您的控制器不在 src 文件夹中,只有服务提供商在其中。所以对于作曲家来说,没有文件可以根据你的 PSR4 自动加载来查找和自动加载。