Пользовательский класс ControllerProvider не найден

У меня есть собственный класс поставщика контроллеров, который работает нормально. Я попытался добавить второй, и он просто продолжает говорить:

Неустранимая ошибка: класс «Bar\BarControllerProvider» не найден в C:\xampp\htdocs\foobar\src\app.php в строке 18

У меня он настроен так же, как и первый, с

namespace Bar;

...

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

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

        ...

        return $controllers;
    }
}

И автозагрузчик настроен в композиторе:

{
    "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?


person Dallas    schedule 21.04.2016    source источник
comment
композитор docs упоминает, что вы должны заканчивать каждое объявление пространства имен с помощью ` \\`. Попробуйте сделать это.   -  person nVitius    schedule 21.04.2016


Ответы (1)


Я думаю, вам не нужно определять разные сопоставления для одной и той же папки, и я предлагаю вам использовать автозагрузку PSR-4 вместо автозагрузки PSR-0, как описано здесь в документе:

PSR-4 является рекомендуемым способом, так как он предлагает большую простоту использования (нет необходимости повторно генерировать автозагрузчик при добавлении классов).

Просто попробуйте сопоставить папку src следующим образом:

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

Надеюсь, это поможет

person Matteo    schedule 21.04.2016