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