将Controller作为服务移动到顶层的其他服务..... symfony2

时间:2016-01-29 12:00:39

标签: symfony doctrine-orm

如果我有一个名称空间

的控制器
      Src/ApiMap/ApiMapBundle/controller/Getapicontroller
           class GetApiController extends Controller {
           fitch data on the bases of entities define in entites classes and then save that data in in table
   and save it in database
}

现在我将此定义为

中的服务
     App/config/service.yml
         services:
            app.get_controller:  
           class: ApiMaps\ApiMapBundle\Controller\GetApiController

3我在位置上定义了一个服务类

       app/container/getApi.php

现在我想在这个类中访问这个控制器服务我在这个服务中意味着我如何访问,因为如果我使用

         this->get function 

在简单的课程中我需要什么。

关键是我无法将我的逻辑移动到服务bcz它正在使用控制器中的实体和其他东西我想将此逻辑移动到某些第三类服务... 它的位置现在是

   src/container
           getapi.php  

现在它的定义......

 <?php
   namespace dino_container\GetApi;
  class GetApi {
          public function __construct() {
            i want to incorport this controller service in this class...
        }

1 个答案:

答案 0 :(得分:1)

好像我们之前有过这样的对话。

尝试从命令调用控制器方法是没有意义的。控制器方法的工作是将请求转换为响应。命令没有请求对象,也不知道如何处理Response对象。

相反,您希望通过将功能提取到其自身的服务中来共享控制器和命令之间的功能。然后,您可以从命令和控制器访问该服务。

# services.yml
my_service:
  class: MyService
  arguments: ['@doctrine.orm.default_entity_manager']

# Controller
public function myAction(Request $request) 
{
  $myService = $this->container->get('my_service');
  $myService->doSomethingShared();

# Command
public function execute()
{
  $myService = $this->container->get('my_service');
  $myService->doSomethingShared();