我想從自定義命令執行動作。 forward方法Controller.php這樣的類提供了這個功能,但我不知道從命令文件來自命令的調用動作
4
A
回答
3
使用控制器作爲服務How to Define Controllers as Service
5
使得控制器服務會導致性能的execute()方法訪問它因請求堆棧而開銷,因爲它應該返回HttpResponse
。該命令中的Request
範圍不會非常有用。
我建議你將控制器的操作重構爲一個單獨的服務類定義,並通過將其設置爲ContainerAwareCommand
來從控制器和命令的容器中獲取該類。
1
如果你想打電話從命令控制器動作,那麼你就需要建立在你的命令代碼的控制器(以及隨後對控制器的要求)。
如果你有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,這意味着你的控制器和動作可以直接從你的命令(可能)設置的容器中調用。這將處理您的控制器和操作可能具有的依賴關係。
- 將您需要的功能從您的操作劃分到它自己的類或服務中。這是更好的方式,因爲如果你在兩個地方調用同一位代碼,將它集中在某處是有意義的。
+0
這是我體驗過的方式,但它需要在命令文件的「執行」功能中使用方法'forward'。看來,這種方法'前進'只適用於控制器 –
相關問題
- 1. 來自命令行的MS Word命令
- 2. shell腳本來自動scp命令
- 3. 來自javascript的調用動作方法
- 4. 來自Tkinter.Button的命令
- 5. 來自configurations.compile.collect的Gradle命令
- 6. 來自Java的Linux命令
- 7. 來自C#的Unix命令
- 8. 來自Qt的ssh命令
- 9. 禁用自動命令
- 10. 來自Java的Linux命令行指令
- 11. 使用來自Pascal的Windows命令行
- 12. 調用來自控制器的命令不行
- 13. 如何使用來自pysnmp V3命令響應者的回調?
- 14. 來自PHP的命令行調用未執行
- 15. processbuilder來運行來自Java的命令
- 16. 使用popen()來調用shell命令?
- 17. 命令來調用SWI,序言從PHP
- 18. 來自AngularJs指令的調用函數
- 19. 調用命令不起作用
- 20. 運行命令來自C#程序的提示命令
- 21. 來自命令行的NullPointerException,而不是IntelliJ調試器
- 22. 有條件渲染的命令鏈接不會調用動作
- 23. 自動化執行命令
- 24. 自動生成Nuget命令?
- 25. 運行CMD自動命令
- 26. 運行來自JAVA的CMD命令
- 27. 來自python dict命令的Java hashmap?
- 28. 來自後臺線程的'more'命令
- 29. Weka來自命令行的ThresholdSelector
- 30. 來自SELECT命令的值是對象
正是在這個解決方案中,我需要使用forward。 –