【问题标题】:Laravel not finding the controller located in other folderLaravel 找不到位于其他文件夹中的控制器
【发布时间】:2021-01-02 15:34:04
【问题描述】:

我正在尝试在 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

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

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

protected $namespace = '';

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

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';
    }
}

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

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

我觉得我错过了一些愚蠢的东西,但不知道是什么。

【问题讨论】:

  • 你有没有告诉 composer 这个 src 目录,它现在必须自动加载 src 命名空间?
  • 不,我该怎么做?
  • 查看composer.jsonautoload 部分中的psr-4 部分,看看Laravel 如何为App 命名空间设置它,并为您的src 添加一个条目类似的方式
  • 天哪,你是神!

标签: php laravel composer-php clean-architecture hexagonal-architecture


【解决方案1】:

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

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

更改后运行composer dump-autoload。 并且不要忘记遵循 psr-4 规则并使用 Studly 案例命名空间和类名。

namespace Src\Notebook\Infrastructure;

【讨论】:

    猜你喜欢
    • 2019-01-18
    • 2021-03-10
    • 2019-12-16
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多