Я хочу выполнить действие из пользовательской команды. Вперед метод Controller.php класс обеспечивает эту функцию, но я не знаю, доступ к нему из метода Execute() командного файлаВызывающее действие из команды
ответ
Использование контроллера в качестве службы How to Define Controllers as Service
Making контроллер услуга приведет к производительности из-за стека запросов, так как тогда он должен вернуть HttpResponse
. Область Request
не будет очень полезна в команде.
Я бы посоветовал вам реорганизовать действие с контроллера на отдельное определение класса обслуживания и получить этот класс из контейнера как в контроллере, так и в команде, сделав его ContainerAwareCommand
.
Если вы пытаетесь вызвать действие контроллера из команды, то вам нужно настроить контроллер (и впоследствии запрос на контроллер) в командной коде.
Если вы посмотрите в Symfony\Bundle\FrameworkBundle\Controller
, то вы увидите, что метод forward()
дублирует текущий Request
объект, а затем отправляет его через HttpKernel
. Поскольку команды не используют HttpKernel, такой переадресация не будет работать.
В зависимости от того, что делает ваши действия, вы можете просто быть в состоянии сделать:
$controller = new Your\Controller();
$controller->yourAction();
Если действие требует запрос затем:
$request = Symfony\Component\HttpFoundation\Request::createFromGlobals();
$controller = new Your\Controller();
$controller->setContainer($this->getContainer()); // from the ContainerAwareCommand interface
$controller->yourAction($request);
звуками него это не сделав то, что вы хотите, так что есть несколько путей вперед:
- Включите ваш контроллер в сервис, это описано в the cookbook и будет означать, что ваш контроллер и действие могут быть вызваны непосредственно из контейнера, который ваша команда (возможно) настроила. Это управляет зависимостями, которые могут иметь ваш контроллер и действия.
- Разделите функциональность, которая вам нужна от вашего действия, в свой класс или службу. Это лучший путь вперед, как если бы вы вызывали один и тот же бит кода в двух местах, имеет смысл централизовать его где-то.
Это способ, которым я испытал, но требует использования метода «вперед» в функции «выполнить» командного файла. Похоже, что этот метод «вперед» работает только в контроллерах –
- 1. Вызывающее действие на PartialView
- 2. Действие кнопки UIAlertView, вызывающее ошибку
- 3. UIRefreshControl addTarget действие, вызывающее ошибку «непризнанного селектора»
- 4. «действие» в Ember, не вызывающее метод контроллера
- 5. TIME_TICK действие, не вызывающее широковещательный приемник
- 6. JavaFX - действие кнопки, вызывающее большую строку ошибок
- 7. Как перезагрузить действие, вызывающее частичный вид
- 8. struts2 s: отображение тега вызывающее действие в таблице отображения
- 9. Намерение, вызывающее активность, сбой
- 10. Изменение UITextField с помощью UIPickerView, не вызывающее EditingDidChange Действие
- 11. Как протестировать контроллер MVC Действие, вызывающее службу, связанную с контроллером
- 12. обращающегося PrimeFaces кнопки команды из фасоли добавить действие слушателя
- 13. приложение asp.net, вызывающее веб-службу
- 14. Postgresql удалить действие для команды копирования
- 15. начать действие с помощью команды пуска голоса
- 16. Сопряжение массива Javascript, вызывающее исключение из памяти?
- 17. Отправка события из ViewModel в вызывающее приложение
- 18. Планирование Java, вызывающее ошибку
- 19. Решение ArithmeticOverflow, вызывающее AddrOppinedObject
- 20. Отслеживание DLL, вызывающее BadImageFormatException
- 21. Вызывающее событие другого класса
- 22. Обновление SQL, вызывающее тупик
- 23. Выполнение команды из другой команды
- 24. Растровое изображение, вызывающее OutOfMemoryError
- 25. Исключение, вызывающее веб-службу из другой веб-службы
- 26. Макет Изменение, вызывающее сбой
- 27. cudaMemcpy2D вызывающее сегментный вина
- 28. Изображение, вызывающее крушение
- 29. corrplot вызывающее странные ошибки
- 30. Угловое обслуживание, вызывающее ошибку
Как раз с этим решением, которое мне нужно использовать вперед. –