找不到自定义 ControllerProvider Class

Custom ControllerProvider Class not found

我有一个自定义控制器提供程序 class,它工作正常。我试过添加第二个,它一直在说:

Fatal error: Class 'Bar\BarControllerProvider' not found in C:\xampp\htdocs\foobar\src\app.php on line 18

我已经按照与第一个相同的方式设置了它,

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());

实际上我已经删除了整个 vendor 文件夹并重新安装了 composer,但没有任何区别。

如果我注释掉 bars mount,foos 会正常工作。为什么找不到 BarControllerProvider?

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

PSR-4 is the recommended way though since it offers greater ease of use (no need to regenerate the autoloader when you add classes).

只需尝试将 src 文件夹映射如下:

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

希望对您有所帮助