Эта ошибка выдается, если я установил для среды '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