Задать вопрос
colonel
@colonel
Разработчик PHP, Laravel

AppKernel в Symfony 2

Недавно работаю с Symfony 2.
Возник вопрос.

Как известно, в AppKernel.php подключаются все нужные bundles.
У меня, например, кроме основных, подключены дополнительные бандлы для
админки, для миграций (DoctrineMigrationsBundle) и некоторые другие.

Когда загружаются страницы фронтенд части, зачем грузятся эти ненужные бандлы?
Кроме того, — миграции вообще используются только в консоли.
Зачем они грузятся везде?

Или я неправильно ее готовлю? ©
  • Вопрос задан
  • 3284 просмотра
Подписаться 3 Оценить Комментировать
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
При первой загрузке подключаются все бандлы. Это сделано для того что бы сформировать список сервисов каждого бандла и вообще разобраться что есть что. Потому в кэше появляется вызов всех доступных сервисов, и поидее до отчистки кэша бандлы подключаться без необходимости уже не будут. в dev окружении они подключаются постоянно только что бы список сервисов был актуален (хотя тоже не факт).
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
cystbear
@cystbear
Можно разделить набор загружаемых бандлов с помощью разных environment`ов

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
            // ....
        );

        $environment = $this->getEnvironment();

        if (in_array($environment, array('test', 'behat'))) {
            $bundles[] = new Behat\BehatBundle\BehatBundle();
            $bundles[] = new Behat\MinkBundle\MinkBundle();
        }

        return $bundles;
    }
}


Вызов консоли с отличным от дефолтного (dev) env
app/console --env=test %YOUR_COMMAND%
Ответ написан
@nuclear
Бандл миграций можно загрузить в окружении dev, т.к. по-умолчанию консоль запускается именно с этим окружением.
А по остальным. У вас есть реальные проблемы с производительностью из-за того что грузяться все бандлы?
Просто сами по себе бандлы это почти пустые классы и они не должны создавать нагрузки.
Ответ написан
Комментировать
MuXaJIbI4
@MuXaJIbI4
Я как то давно тоже задумывался над этой проблемой. И даже принял решение сделать несколько проектов для разделения админки и фронтенда, и общий функционал вынес в свои бандлы и из подключал в этих проектах. Но потом понял что смысла в этом почти никакого нет и щас делаю все вместе в одном проекте.
Ответ написан
Комментировать
MuXaJIbI4
@MuXaJIbI4
Еще щас пришла идея в голову пока писал предыдущий комент. Можно сделать разные точки входа для админки и фронтенда и в каждой подключать свой AppKernel, где и будут прописаны у каждого свой набор бандлов. Честно скажу не знаю на сколько это рабочий вариант. Но попробовать можно :)
Ответ написан
@shagguboy
в Симфони все грузится автолоадом (ну и Lazy Load во всю используется), поэтому подключение бандлов сильно ничего не грузит.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы