Если APP_ENV = test, зависимость от несуществующей службы генерируется, если служба не является общей - PullRequest
0 голосов
/ 14 декабря 2018

Эта ошибка выдается, если я установил для среды 'test'

Служба "App \ Controller \ ExceptionController" зависит от несуществующей службы "App \ Service \ Prismic \"LinkResolverService ".

Пока мой код работает с Symfony 4.1, в 4.2 он работает только тогда, когда для среды установлено значение 'dev'.

Что я делал:

Переопределить контроллер исключений Twig в 'config / packages / twig.yaml':

twig:
    exception_controller: App\Controller\ExceptionController::showAction

С помощью следующего:

use App\Service\Prismic\BreadcrumbResolverServiceInterface;
use App\Service\Prismic\LinkResolverServiceInterface;
use App\Service\Prismic\ServiceInterface;
use Lexik\Bundle\DataLayerBundle\Manager\DataLayerManager;
use stdClass;
use Symfony\Bundle\TwigBundle\Controller\ExceptionController as TwigExceptionController;
use Symfony\Component\Debug\Exception\FlattenException;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;
use Twig\Environment;

class ExceptionController extends TwigExceptionController
{

    /**
     *
     * @var ServiceInterface
     */
    protected $prismicService;

    /**
     * @var BreadcrumbResolverServiceInterface
     */
    private $breadcrumbService;

    /**
     * @var DataLayerManager
     */
    private $dataLayerManager;

    /**
     *
     * @var LinkResolverServiceInterface
     */
    private $prismicLinkResolver;

    public function __construct(Environment $twig, bool $debug, ServiceInterface $prismicService, BreadcrumbResolverServiceInterface $breadcrumbService, DataLayerManager $dataLayerManager, LinkResolverServiceInterface $prismicLinkResolver)
    {
        parent::__construct($twig, $debug);

        $this->prismicService = $prismicService;
        $this->breadcrumbService = $breadcrumbService;
        $this->dataLayerManager = $dataLayerManager;
        $this->prismicLinkResolver = $prismicLinkResolver;
    }

    /**
     * Tries to fetch a document from Prismic with the given error code to show
     * its content.
     *
     * @see parent
     */
    public function showAction(Request $request, FlattenException $exception, DebugLoggerInterface $logger = null)
    {
        // do stuff
    }

}

Интерфейс LinkResolverServiceInterface существует и являетсяреализован моим сервисом.

Я настроил сервис как недопустимый в 'config / services.yaml':

App\Service\Prismic\LinkResolverService:
    # not shared because of function setFullResolve
    shared: false

Если я установил для общего доступа значение true, проблема исчезла,Но мне нужен не-общий сервис.Но согласно документации, это должно работать:

https://symfony.com/doc/current/service_container/shared.html

NB. Это не относится к ExceptionController.Если я удалю зависимость, она сломается в другом файле.

Обновление : я снова выполнил обновление без проблем.После исправления устаревания Controller для использования AbstractController возникает проблема.Мне придется отлаживать это дальше.

Update2 : сообщил об этой ситуации в Symfony: https://github.com/symfony/symfony/issues/29628

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...