2015-07-01 6 views
0

В приложении Symfony 2 мне нужен класс модели (без сохранения в базе данных) с функциями бизнес-логики, которые связаны с другими объектами (с сохранением).Как я могу привести бизнес-логику в класс модели Symfony, который связан с другими объектами?

В моей концептуальной модели есть "Номера", "Связи" и "Алгоритмы". Номера и соединения - это организации Symfony, основанные на доктрине. Алгоритмы должны быть классами моделей или объектами без сохранения в базе данных.

Бизнес-логика заключается в следующем: - Существуют различные виды алгоритмов. - Один алгоритм делает отношения между комнатами и соединениями в разных критериях. Это подразумевает получение комнат или подключений из базы данных, применение логики, изменение или создание новых объектов в базе данных.

Первый подход, который я сделал, - это фабрика алгоритмов как Symfony Service, чтобы предоставить объект для создания базы алгоритмов для параметра типа.

Контроллер вызывает эту службу и вызывает функцию алгоритма для применения логики.

Концептуальная проблема У меня следующие: Я не знаю, какой тип элемента Symfony должен быть классом алгоритма. Если это Entity, он не может получить номера или подключения из базы данных с помощью Doctrine Manager, не так ли? Должен ли это быть Контроллером как услуга с точки зрения Symfony?

У меня есть сомнения в том, как представить это в архитектуре Symfony.

Спасибо

+0

Существует очень исчерпывающий ответ: http://stackoverflow.com/a/25533968/897301 –

ответ

0

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

Куда поместить это также вопрос предпочтения.

Если вам нужно получить доступ к объектам, вы можете определить этот новый класс как службу и ввести другие службы в качестве аргументов.

Пример: В вашем config.yml

app.algorithms_factory: 
    class: AppBundle\Utils\AlgorithmsFactory 
    arguments: [@doctrine.orm.entity_manager] 

В контроллере:

class RoomController extends Controller 
{ 
    public function editRoomAction($roomId, Request $request = null) 
    { 
     $algorithmFactory = $this->get('app.algorithms_factory'); 
     .... 
    } 
}