我正在学习如何创建laravel包的教程。
我使用的是Laravel v8.42.1(PHP v7.4.3(和jetstream包。
我一直在为我的包创建一个控制器,当我试图通过laraval应用程序(<基本url/游乐场(连接到我的url时,我总是会遇到以下错误:
Target class [TestVendorTestPackageHttpControllersPlaygroundController] does not exist.
TestVendor\TestPackage\src\routes.php由主应用程序识别:
use TestVendorTestPackageHttpControllersPlaygroundController;
use IlluminateSupportFacadesRoute;
Route::get('/playground', [PlaygroundController::class, 'index']);
并且是从我的ServiceProvider类加载的:
$this->loadViewsFrom(__DIR__.'/resources/views', 'playground');
loadRoutesFrom(__DIR__.'/routes.php');
我的名称空间通常也正确地写在我的包的composer.json中:
"autoload": {
"psr-4": {
"TestVendor\TestPackage\": "src/"
}
},
我的PlaygroundController位于src/Http/Controllers/PlaygroundController.php中:
namespace TestVendorTestPackageHttpControllers;
use IlluminateRoutingController;
class PlaygroundController extends Controller
{
public function index()
{
return view('playground::hello');
}
}
视图也在正确的包中。我正在使用https://github.com/Jeroen-G/laravel-packager把我的包裹搭上脚手架。进行了多个composer的自动加载和composer更新。
我的控制器在主应用程序中似乎没有被识别,我想我的名字间距在哪里不正确?
我已经看过了:
- 目标类控制器不存在-Laravel 8解决方案不起作用
- 目标类不存在。laravel 8中的问题解决方案不起作用
您已将控制器命名为:
namespace TestVendorTestPackageHttpControllers;
在上面的行中,尽管你说:
我的PlaygroundController位于src/Http/PlaygroundController.php中:
除非是打字错误,否则您需要在Http
下面添加一个Controllers
目录,并将您的PlaygroundController
放入其中:
src/Http/Controllers/PlaygroundController.php
对于psr-4
自动加载,文件夹结构和名称空间应该相互模仿。