Laravel 找不到位于其他文件夹中的控制器

Laravel not finding the controller located in other folder

我正在尝试在 laravel 中实现一个干净的架构,因此我将我自己的代码移动到 src 文件夹。

我的控制器位于 src\notebook\infrastructure 但是当我从 routes\web.php 调用它时是这样的:

Route::get('/notebook', 'src\notebook\infrastructure\NotebooksController@show');

我收到这个错误:

Illuminate\Contracts\Container\BindingResolutionException
Target class [src\notebook\infrastructure\NotebooksController] does not exist.
http://127.0.0.1:8000/notebook

我还更改了 class RouteServiceProvider 中的命名空间值:

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

protected $namespace = '';

这是我的笔记本控制器class:

namespace src\notebook\infrastructure;

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

class NotebooksController extends Controller
{
    public function show($id)
    {
        echo 'controller from infrastructure folder';
    }
}

我的 laravel 和 composer.json 中的 php 版本是:

"php": "^7.2.5",
"laravel/framework": "^7.24",

我觉得我错过了一些愚蠢的东西,但无法弄清楚是什么。

您是否将 src 文件夹添加到自动加载中? 在 composer.json 文件中,你必须有这样的东西:

"autoload": {
        "psr-4": {
            "App\": "app/",
            "Src\": "src/" // add this
        },
        "classmap": [
            "database/seeds",
            "database/factories"
        ]
    },

改完后运行composer dump-autoload。 并且不要忘记遵循 psr-4 规则并使用 Studly 大小写命名空间和 class 名称。

namespace Src\Notebook\Infrastructure;