Symfony4. Конфликты аннотации ParamConverter, внедряющие сервис с помощью autowire

Когда я пытаюсь использовать аннотацию @ParamConverter в действии контроллера, я получаю сообщение об ошибке

"Cannot resolve argument $company of \"App\\Controller\\ProfileController::top()\": Cannot autowire service \".service_locator.0CrkHeS\": it references class \"App\\Document\\Company\" but no such service exists."

Я знаю, что такой услуги не существует, потому что я исключил Document путь в services.yaml, Мне просто нужно найти объект документа компании от Repostiroy.

Вот мой код контроллера:

<?php

// src/Controller/ProfileController.php
namespace App\Controller;

use App\Document\Company;
use App\Service\DocumentManager\CompanyManager;
use FOS\RestBundle\Controller\FOSRestController;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Swagger\Annotations as SWG;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

/**
* @Route("/profile")
*/
class ProfileController extends FOSRestController
{
/**
* @Route("/top/{id}")
* @Method("GET")
* @SWG\Response(
*     response=200,
*     description="Returns top profiles",
* )
* @SWG\Tag(name="profile")
*
* @ParamConverter("company", class="App\Document\Company")
* @param CompanyManager $companyManager
* @return Response
*/
public function top(CompanyManager $companyManager, Company $company)
{
dump($company->getId());exit;
return $this->handleView($this->view($companyManager->getTopProfiles(), Response::HTTP_OK));
}

}

Настройка services.yaml:

services:
_defaults:
autowire: true
autoconfigure: true
public: false

App\:
resource: '../src/*'
exclude: '../src/{Entity,Document,Migrations,Tests,Kernel.php,Exception,DataFixtures}'

App\Controller\:
resource: '../src/Controller'
tags: ['controller.service_arguments']

1

Решение

В случае, если кто-то другой получит такую ​​же проблему.
Проблема не имела никакого отношения к конфликту автопровода. @ParamConverter не работал, потому что я использовал mongoDB и Doctrine ODM, а не ORM. По умолчанию Doctrine ParamConverter не будет работать с монго документами.
Так что я нашел некоторую информацию здесь
https://matthiasnoback.nl/2012/10/symfony2-mongodb-odm-adding-the-missing-paramconverter/

Определить новый сервис в services.yaml файл:

doctrine_mongo_db_param_converter:
class: Sensio\Bundle\FrameworkExtraBundle\Request\ParamConverter\DoctrineParamConverter
tags:
- { name: request.param_converter, converter: doctrine.odm }
arguments: ['@doctrine_mongodb']

затем @ParamConverter должно работать хорошо сейчас.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]