Php Silex和自动加载控制器类
我在将类自动加载到我正在组装的Silex骨架中时遇到问题。我在另一个项目中工作,但我不知道我在这里做错了什么。 我的目录如下所示:Php Silex和自动加载控制器类,php,composer-php,silex,psr-4,Php,Composer Php,Silex,Psr 4,我在将类自动加载到我正在组装的Silex骨架中时遇到问题。我在另一个项目中工作,但我不知道我在这里做错了什么。 我的目录如下所示: root -src -Controller -HelloController.php -app.php -vendor -web -index.php -composer.json 这是我的index.php <?php $app = require __DIR__.'/../src/app.php'; $app-
root
-src
-Controller
-HelloController.php
-app.php
-vendor
-web
-index.php
-composer.json
这是我的index.php
<?php
$app = require __DIR__.'/../src/app.php';
$app->run();
每当我尝试在浏览器中打开index.php/hello/world时,都会出现以下错误:
InvalidArgumentException in ControllerResolver.php line 153:
Class "App\Controller\HelloController" does not exist
您的
psr-4
不工作。在'/src'
"App\\": "./src"
或者将斜杠移到末尾
"App\\": "src/"
或者删除斜杠。路径必须是相对的。在composer.json中
"App\\": "/src"
到
你可以找到
SilexSkeleton,控制器作为php类
GitHub上的示例:您需要注册此软件包附带的
ServiceControllerServiceProvider
,它将自动扩展现有的resolver
服务,您应该能够加载控制器。@Artamiel不是必需的<代码>HelloController不是一项服务@阿布萨隆·瓦尔德斯——绝对正确。这似乎不是很明显的错误。我测试了提供的代码,它按预期工作。我的代码为您工作?这没有改变任何事情。另外,我还有另一个项目,我为一个非常类似的目录结构而做,其中控制器位于与composer.json相同目录中的src文件夹中的控制器文件夹中,它的自动加载部分如下:“autoload”:{“psr-4”:{“NCBP\\ \:“src/”},
这似乎很好。请运行composer dumpautoload--optimize
并检查HelloController
是否正确映射到vendor/composer/autoload\u classmap.php
中。另外,“NCBP\\”:“src/”
与您的问题中的composer.json
不同。您是对的,它是不同的,我刚才认真地发现我的另一个项目在src之后而不是之前有斜杠。我将继续玩它,看看它是否会破坏我的composer.json并运行composer更新,工作得很好,谢谢!
"App\\": "./src"
"App\\": "src/"
"App\\": "/src"
"App\\": "src"