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

Я создал новый пакет с app / console. Пытаюсь распечатать простое приветствие, чтобы двигаться дальше. Я автоматически загрузил пространство имен, зарегистрировал пакет, создал страницу, но 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 

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

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

КОД:

public function registerBundles()
{
    $bundles = array(
        new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
        new Symfony\Bundle\SecurityBundle\SecurityBundle(),
        new Symfony\Bundle\TwigBundle\TwigBundle(),
        new Symfony\Bundle\MonologBundle\MonologBundle(),
        new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
        new Symfony\Bundle\DoctrineBundle\DoctrineBundle(),
        new Symfony\Bundle\AsseticBundle\AsseticBundle(),
        new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
        new JMS\SecurityExtraBundle\JMSSecurityExtraBundle(),
    );

    if (in_array($this->getEnvironment(), array('dev', 'test'))) {
        $bundles[] = new Webmuch\PageBundle\WebmuchPageBundle();
        $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
        $bundles[] = new Symfony\Bundle\WebConfiguratorBundle\SymfonyWebConfiguratorBundle();
    }

    return $bundles;
}

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


person Aayush    schedule 08.06.2011    source источник
comment
Я удалил кеш и файлы начальной загрузки. Затем восстановите файл начальной загрузки с консоли. Все та же ошибка. Что мне не хватает?   -  person Aayush    schedule 08.06.2011
comment
Покажите нам свою функцию registerBundles ().   -  person Tomasz Kowalczyk    schedule 08.06.2011
comment
Я добавил это к вопросу. Спасибо!   -  person Aayush    schedule 09.06.2011
comment
Вы используете /app_dev.php? Ваша настройка указывает, что вы хотите, чтобы WebmuchPageBundle () загружался только в том случае, если вы находитесь в среде разработки или тестирования ... если вы поместите экземпляр нового класса в массив выше, он загрузится независимо от вашей среды.   -  person Derek Stobbe    schedule 10.06.2011
comment
Я нахожусь в среде разработки. Я знаю о массиве выше, я использую /app_dev.php. Я просто не понимаю, что не так. Я хочу сделать такую ​​мелочь.   -  person Aayush    schedule 12.06.2011
comment
Не знаю, имеет ли это смысл на сегодняшний день, но похоже, что путь к классу Bundle был немного неправильным: Этот: $bundles[] = new Webmuch\PageBundle\WebmuchPageBundle(); Замените на этот: $bundles[] = new Webmuch\PageBundle\PageBundle(); Предположим, он должен работать;)   -  person btbvoy    schedule 12.02.2012


Ответы (2)


Это не похоже на проблему с кешем начальной загрузки (строка 634 указывает на метод Kernel::getBundles(), который вызывает исключение), но на всякий случай есть сценарий, который его восстановит: bin\build_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 Webmuch\PageBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;

class WebmuchPageBundle extends Bundle
{
}

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

person inanimatt    schedule 14.06.2011

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

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

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

person Jumi    schedule 02.06.2013