gzhegow
@gzhegow
aka "ОбнимиБизнесмена"

Как в Symfony сделать предварительную инициализацию модуля (бандла)?

Пока ещё не изучил Doctrine, и хотел бы подключить Eloquent ORM к проекту на Симфони.
Не нашел другого способа зарегистрировать что-то в контейнере, как создать бандл и добавить его в config/bundles.php

Опять же, в контейнер не кладутся обьекты, в симфони как я понял регистрируется создатель обьектов, а не сам объект. Таким образом создав его дважды в двух разных модулях получится два одинаковых подключения к базе данных.

Однако капсюль Eloquent при каждом запросе должен быть сконфигурирован

В других фреймворках я писал какой-то там boot.php и через require или другим способом подключал его где-то.

Есть ли другой способ для Symfony, чтобы не создавать Бандл, для него не создавать Extension, а в config/services.php не регистрировать создание обьекта через какой-нибудь EloquentFactory.class.php?

Как я понимаю только таким образом в симфони делаются так называемые shared-сервисы (проще говоря - синглтоны)

ps. мне также хотелось бы понять каким образом мне использовать env-переменные в моём бандле, который понятия не имеет о env- всего приложения. Вернее физически то имеет, я могу вызвать и получить. Но если этот бандл кому отослать, то переменных окружения у него может не быть и модуль не запустится

спасибо
  • Вопрос задан
  • 280 просмотров
Решения вопроса 1
index0h
@index0h
PHP, Golang. https://github.com/index0h
хотел бы подключить Eloquent ORM к проекту на Симфони.

Это ж одна из худших ORM..., но дело ваше.

Опять же, в контейнер не кладутся обьекты, в симфони как я понял регистрируется создатель обьектов, а не сам объект.

Не совсем так. Контейнер содерждит сервисы, в идеале - statless, но ничто кроме хорошего тона и архитекутры вам не мешает пихать туда все что угодно.

Таким образом создав его дважды в двух разных модулях получится два одинаковых подключения к базе данных.

Если вы зарегистрируете сервис в конфигурации контейнера дважды и будете использовать оба - да, если же будете обращаться к одному и тому же - нет.

Однако капсюль Eloquent при каждом запросе должен быть сконфигурирован

Ну, как бы да, умирающая модель выполнения, вот это все.

Есть ли другой способ для Symfony, чтобы не создавать Бандл, для него не создавать Extension

Конечно, берете и не создаете бандл.

а в config/services.php не регистрировать создание обьекта через какой-нибудь EloquentFactory.class.php?

А вот контейнер наконфигурить таки надо. Не обязательно через фабрику.

Как я понимаю только таким образом в симфони делаются так называемые shared-сервисы (проще говоря - синглтоны)

Синглтоны тут ни при чем, это DI.

мне также хотелось бы понять каким образом мне использовать env-переменные в моём бандле

С вероятностью 146% вам это не нужно, когда из коробки появилась поддержка env файлов мы с коллегами попытались их интегрировать, по жили с ними какое-то время. Профитов не обнаружили и вернулись к parameters.yml.dist.

который понятия не имеет о env- всего приложения. Вернее физически то имеет, я могу вызвать и получить.

Вот именно в этом и состоит DI, сервис не знает, ни где ни как его будут использовать, его конфигурированием занимается контейнер.

Но если этот бандл кому отослать, то переменных окружения у него может не быть и модуль не запустится

Если вы готовите публичный бандл - вам стоит по лучше разобраться с работой DI, иначе никак.

UPD
Как в Symfony сделать предварительную инициализацию модуля (бандла)?

Вам скорее всего нужно зарегистрировать просто сервис: https://symfony.com/doc/current/service_container....
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы