【问题标题】:Service injection in a Symfony controller failsSymfony 控制器中的服务注入失败
【发布时间】:2018-07-26 10:36:51
【问题描述】:

我正在向 Symfony 2.7 应用程序添加一个功能。我有一个被定义为服务的控制器,它又接收另一个服务。以下是我的 services.yml 文件中的相关内容:

  app.service.video_derivative:
    class: MyCompany\AppBundle\Service\VideoDerivativeService
    arguments:
      - "@app.repository.video_derivative"
      - "@doctrine.orm.default_entity_manager"

  api.controller.video_derivative:
    class: MyCompany\AppBundle\Controller\VideoDerivativeController
    arguments:
      - "@app.service.video_derivative"

...我的控制器中的相关代码如下所示:

public function __construct(VideoDerivativeServiceInterface $videoDerivativeService)
{
    $this->videoDerivativeService = $videoDerivativeService;
}


/**
 * @param $id
 * @return JsonResponse
 *
 * @Route("/admin/video-derivative/create-by-clip-id/{id}", name="create_clip_by_id")
 */
public function byClipIdAction($id)
{
     $responseArray = [
         'foo' => 'bar',
         'baz' => 'qux',
         ];
     return new JsonResponse($responseArray);
}

...但是当我在浏览器中打开我的控制器时,我收到以下消息:

可捕获的致命错误:参数 1 传递给 MyCompany\AppBundle\Controller\VideoDerivativeController::__construct() 必须是一个实例 MyCompany\AppBundle\Service\VideoDerivativeServiceInterface,没有给出, 在第 2200 行调用 /usr/src/app/app/cache/dev/classes.php 和 定义

...所以看起来我做错了什么。你将如何调试这个?

【问题讨论】:

  • 看起来 VideoDerivativeService 没有实现 VideoDerivativeServiceInterface。
  • 显示你的路线
  • 谢谢。我已经添加了。

标签: php symfony service dependency-injection controller


【解决方案1】:

原来我需要的是这个类的注解:

/**
 * @\Sensio\Bundle\FrameworkExtraBundle\Configuration\Route(service="api.controller.video_derivative")
 */

一旦到位,我得到了一个更有帮助的错误,并且能够继续开发。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多