ошибка уровня приложения после обновления Symfony до 3.4 - PullRequest
0 голосов
/ 02 октября 2018

сегодня я обновился с sf2.8 до sf3.4 ... сначала я столкнулся с некоторыми ошибками, потому что я не переработал стандартные файлы sf, теперь эти ошибки исчезли, и я застрял с ошибкой на уровне приложения.под sf2.8 это не было проблемой, и я не понимаю, почему это сейчас.

ошибка сработала, нажав "/":

[Tue Oct 02 11:37:31.885382 2018] [proxy_fcgi:error] [pid 24:tid 140202295097088] [client 172.29.0.1:37964] AH01071: Got error 'PHP message: PHP Fatal error: Uncaught Symfony\\Component\\Debug\\Exception\\FatalThrowableError: Type error: Argument 2 passed to TheApp\\FrontendBundle\\Services\\UrlAliasService::__construct() must be an instance of TheApp\\FrontendBundle\\Routing\\Router, instance of Symfony\\Bundle\\FrameworkBundle\\Routing\\Router given, called in /var/www/var/cache/dev/ContainerV5bxhc0/appDevDebugProjectContainer.php on line 3678 in /var/www/src/TheApp/FrontendBundle/Services/UrlAliasService.php:25\nStack trace:\n#0 /var/www/var/cache/dev/ContainerV5bxhc0/appDevDebugProjectContainer.php(3678): TheApp\\FrontendBundle\\Services\\UrlAliasService->__construct(Object(Doctrine\\ORM\\EntityManager), Object(Symfony\\Bundle\\FrameworkBundle\\Routing\\Router), Object(Cocur\\Slugify\\Slugify))\n#1 /var/www/var/cache/dev/ContainerV5bxhc0/appDevDebugProjectContainer.php(3698): ContainerV5bxhc0\\appDevDebugProjectContainer->getTheApp_UrlaliasserviceService()\n#2 /var/www/var/cache/dev/ContainerV5bxhc0/appDevDebugProjectContainer.php(3872): Contain...\n'

так что сервис "UrlAliasService "принимает 3 параметра:

...
use TheApp\FrontendBundle\Routing\Router;
...
public function __construct(EntityManager $entityManager, Router $router, Slugify $slugify)
    {
        $this->em = $entityManager;
        $this->urlRepository = $this->em->getRepository('TheAppFrontendBundle:UrlAlias');
        $this->router = $router;
        $this->slugify = $slugify;
        $this->urlAliasInProcess = new ArrayCollection();
    }

эти 3 параметра подключаются в services.yml:

theapp.urlaliasservice:
        class: TheApp\FrontendBundle\Services\UrlAliasService
        arguments: ["@doctrine.orm.entity_manager", "@router", "@cocur_slugify"]

вот класс маршрутизатора, расширяющий BaseRouter:

namespace TheApp\FrontendBundle\Routing;

use Symfony\Bundle\FrameworkBundle\Routing\Router as BaseRouter;
...
use Symfony\Component\Routing\RequestContext;

class Router extends BaseRouter implements ContainerAwareInterface
{
    private $container;

    public function __construct(ContainerInterface $container, $resource, array $options = array(), RequestContext $context = null)
    {
        parent::__construct($container, $resource, $options, $context);
        $this->setContainer($container);
    }

    public function getGenerator()
    {
        $generator = parent::getGenerator();
        $generator->setContainer($this->container);
        return $generator;
    }

    public function setContainer(ContainerInterface $container = null)
    {
        $this->container = $container;
    }
}

поэтому ошибка говорит мне, что переданный аргумент относится к типу TheApp \ FrontendBundle \ Routing \ Router ...., но на самом деле это тип Symfony \ Bundle \ FrameworkBundle \ Routing \ Router .... читая код этой ошибкине имеет смысла правильно?класс TheApp \ FrontendBundle \ Routing \ Router расширяет Symfony \ Bundle \ FrameworkBundle \ Routing \ Router, так как он не может быть экземпляром из него?помощь и объяснение очень очень ценится.

1 Ответ

0 голосов
/ 02 октября 2018

очевидно, что @router - это служба маршрутизатора, определяемая Symfony\Bundle\FrameworkBundle\Routing\Router.Вместо этого в arguments: ["@doctrine.orm.entity_manager", "@router", "@cocur_slugify"] вы должны ввести свой сервис, например theapp.router.У вас есть несколько вариантов здесь:

  1. объявить ваш сервис как theapp.route
  2. переопределить router с вашим сервисом, но я бы не стал этого делать.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...