我想從我的定製服務訪問控制器方法。我創建了MyManager類,我需要在其中調用createForm()
和generateUrl()
函數。在控制器中,我可以使用:$this->createForm(...)
和$this->generateUrl(...)
,但有什麼服務?有可能的?我真的需要這種方法!我應該使用什麼論據?在Symfony2中調用createForm()和generateUrl()服務
回答
如果你看看這兩個方法在Symfony\Bundle\FrameworkBundle\Controller\Controller
類,你會看到服務名稱以及如何使用它們。
public function generateUrl($route, $parameters = array(), $referenceType = UrlGeneratorInterface::ABSOLUTE_PATH)
{
return $this->container->get('router')->generate($route, $parameters, $referenceType);
}
public function createForm($type, $data = null, array $options = array())
{
return $this->container->get('form.factory')->create($type, $data, $options);
}
基本上,你需要一流的服務router
和form.factory
實現的功能。我不建議將控制器傳遞給你的班級。控制器是主要由框架本身使用的特殊類。如果您打算將您的課程用作服務,請創建它。
services:
my_manager:
class: Something\MyManager
arguments: [@router, @form.factory]
爲服務創建一個帶有兩個參數的構造函數,並在您的類中實現所需的方法。
class MyManager
{
private $router;
private $formFactory;
public function __construct($router, $formFactory)
{
$this->router = $router;
$this->formFactory = $formFactory;
}
// example method - same as in controller
public function createForm($type, $data = null, array $options = array())
{
return $this->formFactory->create($type, $data, $options);
}
// the rest of you class ...
}
這是解決此問題的最佳方法!我在你的回答之前來到了相同的地方,所以我們認爲一致:) – ZaquPL 2015-04-01 23:28:15
假設你注射服務到您的控制器,可以控制對象傳遞給您的服務功能
例如
class myService
{
public function doSomthing($controller,$otherArgs)
{
$controller->generateForm();
}
}
class Mycontroller extends Controller
{
public function indexAction()
{
$this->get("my-service")->doSomthing($this,"hello");
}
}
這是一個糟糕的主意。你應該只注入你需要的實際服務,而不是注入控制器來使用'$ controller-> get()'方法。在最壞的情況下,你可以注入'@ service_container'然後使用它('$ this-> container-> get()'),但即使這樣也不是最佳實踐。 – qooplmao 2015-04-05 10:14:09
@Qoop那麼你的解決方案是什麼? – wonde 2015-04-07 14:33:27
與接受的答案相同。通過路由器和工廠到服務,或者正如我提到的使用服務容器,但不建議。 – qooplmao 2015-04-07 14:34:58
- 1. Symfony2 GenerateUrl with annotation
- 2. Symfony2 GenerateURL複雜的路線
- 3. 使用createForm與symfony2登錄表格
- 4. Symfony2獲取在服務中調用服務的控制器
- 5. 在Symfony2服務中回調失敗
- 6. 服務DependencyInjection在Symfony2中
- 7. Symfony generateUrl
- 8. Symfony2中的服務
- 9. 服務中的Symfony2
- 10. Symfony2中 - 以服務
- 11. Symfony2和Marketplace Web服務
- 12. 錯誤在Symfony2中用作服務
- 13. 在服務中使用Doctrine Symfony2
- 14. 如何避免兩次調用Application .CreateForm?
- 15. Symfony2 Web服務
- 16. Symfony2服務
- 17. generateUrl問題
- 18. 在Windows服務中調用Web服務
- 19. 在REST服務中調用SOAP服務
- 20. 使用Symfony2創建服務
- 21. 使用服務的Symfony2
- 22. Symfony2 - 從服務中調用靜態屬性
- 23. 創建symfony2服務
- 24. Symfony2的從服務
- 25. Symfony2注入服務
- 26. 瞭解Symfony2服務
- 27. Symfony2創建服務
- 28. Symfony2服務結構
- 29. 在symfony2中創建一個服務
- 30. 如何在Symfony2中擴展Doctrine服務?
您可以將您的控制器作爲參數傳遞給您的服務,然後調用$ controller-> createForm(...) – rogeriolino 2015-04-01 18:44:40