У меня есть небольшая дилемма, у меня есть приложение Symfony2, и в нем я собрал пакет, который представляет собой просто слой REST Api для моей базы данных.
Дело в том, что у меня есть другой пакет, и я хочу, чтобы он выполнял некоторые обновления в базе данных. Я не хочу переписывать код для выполнения тех же задач в этом новом пакете.
Возможно ли для меня выдавать запросы к моему API из другого пакета в том же приложении? Это займет больше времени, чем выполнение запросов из этого нового пакета? Я беспокоюсь о производительности и масштабируемости.
В качестве примера напишу пример:
Пакет A содержит API REST, один из ресурсов, который он предоставляет, это «Person», который позволяет GET, POST, PUT, DELETE. Этот ресурс сопоставляется с таблицей базы данных.
С другой стороны, есть Bundle B, который должен выполнить некоторые задачи и, наконец, обновить некоторых пользователей в моей базе данных. Я не хочу копировать свой Person Entity из пакета api в этот пакет для выполнения обновления.
Что бы вы сделали в такой ситуации?
Я думаю, что вы должны общаться между пакетами, используя сервисы (Dependency Injection).
Если вы регистрируете сервис в одном пакете и называете его «myDataLayerService», вы можете внедрить его в сервисы другого пакета (как и любые другие сервисы — сервис запросов, диспетчер сущностей, маршрутизатор и т. Д.) Или вы можете получить его в контроллере. очень легко
$myDBLayer = $this->get("myDataLayerService");
И тогда вы вызываете любую публичную функцию, созданную в вашем сервисе.
$myDBLayer->persistObjectToDatabase($veryNiceObject);
TL; DR: зарегистрированные службы Symfony в одном пакете доступны в любом другом пакете.
Других решений пока нет …