#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: привет