Мне приходится иметь дело с «измерительными цепями», каждый из которых состоит из 1 измерительного прибора и нескольких резервуаров. Цепи, инструменты и танки находятся в месте.Выполнение действия другого контроллера
Очевидно, что цепи в местоположении А не может состоять из элементов, расположенных в Location B или C.
Поэтому у меня есть следующие объекты:
- ЦЕПЬ
- chain_id
- location_id
- instrument_id
- date_creation
- date_destruction
- ИНСТРУМЕНТ
- instrument_id
- LOCATION_ID
- БАК
- tank_id
- LOCATION_ID
- TANK_IN_CHAIN
- tank_in_chain_id
- tank_id
- chain_id
- date_connection
- date_disconnection
- МЕСТОПОЛОЖЕНИЕ
- LOCATION_ID
То, что я хочу сделать, это:
- Когда я переместить инструмент в новое место (MoveAction() в InstrumentController), цепь должна быть detroyed
- Когда я двигаю танк в новом месте (moveAction() в TankController), цепь должна быть разрушена
- «Уничтожение» Цепочка означает: chain.date_destruction установлен на now() и tank_in_chain.date_disconnection, установленный в настоящее время() для всех соответствующих танков , Это делается в destroAction в ChainController (потому что иногда мне нужно уничтожить цепи даже если прибор или танк не переместились)
Моя проблема:
Как вызвать ChainController :: destroyAction () от InstrumentController :: moveAction() или TankController :: moveAction()?
Я читал о функции forward(), но из того, что я понял, это не то, что мне нужно. Другая возможность, которую я вижу, - установить ChainController как службу, но я не уверен, что это правильный способ решить эту проблему, то есть она может работать, но это не «хорошая практика».
Как вы думаете?
Цистерны для любой помощи! Cheers.
Спасибо. Обратные вызовы жизненного цикла кажутся слишком простыми для моего случая (пример, который я дал, упрощен для лучшего понимания), но, читая документ, кажется, что некоторые «нормальные» события могут сделать работу правильно. Я исследую это. – Blacksad
Да, я предпочитаю использовать прослушиватель событий в этом случае. И вы могли бы даже связать его с услугами для удобства тестирования :) – passkey1510
Мне удалось создать Event и Listener, чтобы уничтожить цепочку, когда движется инструмент или танк. Теперь я пытаюсь отключить Танки, когда Цепь разрушена вышеупомянутыми событиями. Другими словами, я хочу вызвать событие из EventListener, но функция get() в: $ this-> get ('event_dispatcher') -> dispatch (CoreEvents :: onChainDestruction, $ event); не распознается вне контроллера. Я нашел много подобных проблем в Интернете, но мне все еще не ясно, как это сделать. Есть идеи? – Blacksad