Пакет Symfony2 не регистрируется

#symfony #registry #bundle

#symfony #реестр #пакет

Вопрос:

Я создал новый пакет с приложением / консолью. Пытаюсь напечатать простое приветствие, чтобы я мог двигаться дальше. Я загрузил пространство имен автоматически, зарегистрировал пакет, создал страницу, но Symfony обнаруживает исключение:

 Bundle "PageBundle" does not exist or it is not enabled. Maybe you forgot to add it in the registerBundles() function of your AppKernel.php file?
  

Но я уже это сделал.

Журнал показывает:

 [2011-06-08 23:41:56] request.CRITICAL: InvalidArgumentException: Bundle "PageBundle" does not exist or it is not enabled. Maybe you forgot to add it in the registerBundles() function of your AppKernel.php file? (uncaught exception) at /Applications/MAMP/htdocs/Symfony/app/bootstrap.php.cache line 634 
  

Я также очистил папку с кэшированными разработчиками. Кто-нибудь может помочь мне разобраться, что не так. Я делал это раньше, у меня впервые возникает такая проблема. Что-то связанное с bootstrap.php.cache

Спасибо! Ценю любую помощь.

код:

 public function registerBundles()
{
    $bundles = array(
        new SymfonyBundleFrameworkBundleFrameworkBundle(),
        new SymfonyBundleSecurityBundleSecurityBundle(),
        new SymfonyBundleTwigBundleTwigBundle(),
        new SymfonyBundleMonologBundleMonologBundle(),
        new SymfonyBundleSwiftmailerBundleSwiftmailerBundle(),
        new SymfonyBundleDoctrineBundleDoctrineBundle(),
        new SymfonyBundleAsseticBundleAsseticBundle(),
        new SensioBundleFrameworkExtraBundleSensioFrameworkExtraBundle(),
        new JMSSecurityExtraBundleJMSSecurityExtraBundle(),
    );

    if (in_array($this->getEnvironment(), array('dev', 'test'))) {
        $bundles[] = new WebmuchPageBundleWebmuchPageBundle();
        $bundles[] = new SymfonyBundleWebProfilerBundleWebProfilerBundle();
        $bundles[] = new SymfonyBundleWebConfiguratorBundleSymfonyWebConfiguratorBundle();
    }

    return $bundles;
}
  

Пакет также отображается как активный пакет в профилировщике.

Комментарии:

1. Я удалил файлы кэша и начальной загрузки. Затем восстановил файл начальной загрузки с консоли. Все та же ошибка. Чего я не понимаю?

2. Покажите нам вашу функцию registerBundles().

3. Я добавил это к вопросу. Спасибо!

4. Используете ли вы /app_dev.php ? Ваша настройка указывает, что вы хотите загружать WebmuchPageBundle () только в том случае, если вы находитесь в среде разработки или тестирования… если вы поместите экземпляр нового класса в массив выше, он будет загружаться независимо от вашей среды.

5. Я не знаю, имеет ли это смысл на сегодняшний день, но, похоже, был немного неправильный путь к классу пакета: Этот: $bundles[] = new WebmuchPageBundleWebmuchPageBundle(); Заменить на этот: $bundles[] = new WebmuchPageBundlePageBundle(); Предположим, должно сработать 😉

Ответ №1:

Не похоже, что проблема с кешем начальной загрузки (строка 634 указывает на Kernel::getBundles() метод, который выдает исключение), но на всякий случай есть скрипт, который его перестроит: binbuild_bootstrap.php . Кэш существует для уменьшения количества require() операций, которые Symfony потребуется выполнить для загрузки основных классов Symfony, и пока вы используете одну из бета-версий, маловероятно, что там что-то действительно не так.

Похоже, что это может быть проблема с именованием: ваша ошибка связана с отсутствием PageBundle, но, согласно вашему ядру, пакет должен называться WebmuchPageBundle. Вы правильно ссылались на него в своем routing_dev.yml ? Примером конфигурации маршрутизации может быть:

 page:
    resource: "@WebmuchPageBundle/Controller/DefaultController.php"
    type:     annotation
  

Поскольку вы определили этот пакет только для сред разработки и тестирования, вам следует использовать routing_dev.yml , а не routing.yml .

Затем проверьте, правильно ли назван класс пакета. У вас должен быть файл в корне вашего пакета (например, src/Webmuch/PageBundle/WebmuchPageBundle.php ) со следующим содержимым:

 namespace WebmuchPageBundle;
use SymfonyComponentHttpKernelBundleBundle;

class WebmuchPageBundle extends Bundle
{
}
  

О, и, очевидно, проверьте, может ли пользователь веб-сервера читать каталог вашего пакета. Я думаю, что это выдает другую ошибку, но это стоит проверить!

Ответ №2:

У меня была эта ошибка раньше. Проверьте свои маршруты! Вероятно, где-то у вас есть строки, подобные этой:

 webmuch_page_hello_world:
    pattern:   /hello
    defaults: { _controller: PageBundle:Default:hello }
  

Там «PageBundle» неверно. Вам следует использовать «WebmuchPageBundle». Поэтому используйте его следующим образом: WebmuchPageBundle:Default: привет