【发布时间】: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.json的autoload部分中的psr-4部分,看看Laravel 如何为App命名空间设置它,并为您的src添加一个条目类似的方式 -
天哪,你是神!
标签: php laravel composer-php clean-architecture hexagonal-architecture