Php 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-

我在将类自动加载到我正在组装的Silex骨架中时遇到问题。我在另一个项目中工作,但我不知道我在这里做错了什么。 我的目录如下所示:

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"