找不到自定义ControllerProvider类

时间:2016-04-21 02:34:04

标签: symfony composer-php silex autoloader

我有一个正常运行的自定义控制器提供程序类。我已经尝试添加第二个,它只是一直说:

  

致命错误:第18行的C:\ xampp \ htdocs \ foobar \ src \ app.php中找不到“Bar \ BarControllerProvider”类

我设置的方式与第一个相同,只需

namespace Bar;

...

class BarControllerProvider implements ControllerProviderInterface {
    public function connect(Application $app) {
        ...
        $controllers = $app['controllers_factory'];

        $controllers->get('/', function () use ($app) {
           ...
        });

        ...

        return $controllers;
    }
}

自动加载器在composer中设置:

{
    "require": {
        "silex/silex": "~1.3",
        "doctrine/dbal": "~2.2",
        "symfony/security": "^3.0"
    },
    "autoload" : {
        "psr-0": {
            "Foo": "/src/Foo",
            "Bar": "/src/Bar"
        }
    }
}

文件目录看起来像这样:

-config (bunch of stuff in here)
-src
  |-Foo
  |  |-FooControllerProvider.php
  |-Bar
  |  |-BarControllerProvider.php
  |-app.php
-vendor (bunch of stuff in here)
-web (bunch of stuff in here)
-composer.json
-composer.lock

app.php有以下内容:

$app->mount("/foos", new Foo\FooControllerProvider());
$app->mount("/bars", new Bar\BarControllerProvider());

我实际上已经删除了整个供应商文件夹并进行了一次全新的作曲家安装,并没有任何区别。

如果我注释掉栏杆,那么foos就能正常工作。为什么找不到BarControllerProvider?

1 个答案:

答案 0 :(得分:3)

我认为您不需要为同一文件夹定义不同的映射,我建议您使用PSR-4自动加载而不是PSR-0自动加载,如文档中所述here

  

PSR-4是推荐的方式,因为它提供了更大的便利性   使用(添加类时无需重新生成自动加载器。)

只需尝试映射src文件夹,如下所示:

{
    "autoload": {
        "psr-4": { "": "src/" }
    }
}

希望这个帮助