Symfony 4: вы запросили несуществующий сервис

Я обновил свой веб-сайт с Symfony 3.4 до Symfony 4 и внес небольшие изменения. Но знайте, что у меня есть эта ошибка:

Вы запросили несуществующую услугу "D".

Вот моя трассировка стека:

Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException:
You have requested a non-existent service "D".

  at vendor\symfony\dependency-injection\Container.php:263
  at Symfony\Component\DependencyInjection\Container->get('D')
     (vendor\symfony\routing\Loader\DependencyInjection\ServiceRouterLoader.php:38)
  at Symfony\Component\Routing\Loader\DependencyInjection\ServiceRouterLoader->getServiceObject('D')
     (vendor\symfony\routing\Loader\ObjectRouteLoader.php:55)
  at Symfony\Component\Routing\Loader\ObjectRouteLoader->load('D:\\IIS Websites\\Wizard\\src/config/routing.yml', 'service')
     (vendor\symfony\config\Loader\DelegatingLoader.php:40)
  at Symfony\Component\Config\Loader\DelegatingLoader->load('D:\\IIS Websites\\Wizard\\src/config/routing.yml', 'service')
     (vendor\symfony\framework-bundle\Routing\DelegatingLoader.php:70)
  at Symfony\Bundle\FrameworkBundle\Routing\DelegatingLoader->load('D:\\IIS Websites\\Wizard\\src/config/routing.yml', 'service')
     (vendor\symfony\framework-bundle\Routing\Router.php:56)
  at Symfony\Bundle\FrameworkBundle\Routing\Router->getRouteCollection()
     (vendor\symfony\routing\Router.php:367)
  at Symfony\Component\Routing\Router->getMatcherDumperInstance()
     (vendor\symfony\routing\Router.php:289)
  at Symfony\Component\Routing\Router->Symfony\Component\Routing\{closure}(object(ResourceCheckerConfigCache))
  at call_user_func(object(Closure), object(ResourceCheckerConfigCache))
     (vendor\symfony\config\ResourceCheckerConfigCacheFactory.php:43)
  at Symfony\Component\Config\ResourceCheckerConfigCacheFactory->cache('D:\\IIS Websites\\Wizard\\var\\cache\\dev/srcDevDebugProjectContainerUrlMatcher.php', object(Closure))
     (vendor\symfony\routing\Router.php:302)
  at Symfony\Component\Routing\Router->getMatcher()
     (vendor\symfony\routing\Router.php:256)
  at Symfony\Component\Routing\Router->matchRequest(object(Request))
     (vendor\symfony\http-kernel\EventListener\RouterListener.php:109)
  at Symfony\Component\HttpKernel\EventListener\RouterListener->onKernelRequest(object(GetResponseEvent), 'kernel.request', object(EventDispatcher))
     (vendor\symfony\event-dispatcher\EventDispatcher.php:212)
  at Symfony\Component\EventDispatcher\EventDispatcher->doDispatch(array(array(object(DebugHandlersListener), 'configure'), array(object(ValidateRequestListener), 'onKernelRequest'), array(object(SessionListener), 'onKernelRequest'), array(object(FragmentListener), 'onKernelRequest'), array(object(RouterListener), 'onKernelRequest'), array(object(ResolveControllerNameSubscriber), 'onKernelRequest'), array(object(LocaleListener), 'onKernelRequest'), array(object(TranslatorListener), 'onKernelRequest'), array(object(TraceableFirewallListener), 'onKernelRequest')), 'kernel.request', object(GetResponseEvent))
     (vendor\symfony\event-dispatcher\EventDispatcher.php:44)
  at Symfony\Component\EventDispatcher\EventDispatcher->dispatch('kernel.request', object(GetResponseEvent))
     (vendor\symfony\http-kernel\HttpKernel.php:125)
  at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 1)
     (vendor\symfony\http-kernel\HttpKernel.php:66)
  at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, true)
     (vendor\symfony\http-kernel\Kernel.php:190)
  at Symfony\Component\HttpKernel\Kernel->handle(object(Request))
     (public\index.php:34)

Заранее благодарны за Вашу помощь.


person Nelson Rodrigues Marreiros    schedule 04.01.2018    source источник
comment
Где код? мы не волшебники :-)   -  person Smaïne    schedule 04.01.2018
comment
Можете ли вы показать свой код, где вызывается эта служба?   -  person Imanali Mamadiev    schedule 04.01.2018
comment
Я никогда не называю эту услугу проблемой   -  person Nelson Rodrigues Marreiros    schedule 04.01.2018
comment
at Symfony\Component\Config\ResourceCheckerConfigCacheFactory->cache('D:\\IIS Websites\\Wizard\\var\\cache\\dev/srcDevDebugProjectContainerUrlMatcher.php', object(Closure)) - это некрасиво? Вы уверены, что правильно настроили пути для своего кеша?   -  person Nico Haase    schedule 04.01.2018
comment
Да : public function getCacheDir() { return $this->getProjectDir().'/var/cache/'.$this->environment; }   -  person Nelson Rodrigues Marreiros    schedule 04.01.2018
comment
Вы пытались удалить свой cache?   -  person Imanali Mamadiev    schedule 04.01.2018
comment
Да несколько раз, но я всегда получаю эту ошибку   -  person Nelson Rodrigues Marreiros    schedule 04.01.2018
comment
очистите каталог кеша вручную и повторите попытку. У вас нет службы?   -  person Smaïne    schedule 04.01.2018
comment
Я всегда очищаю кеш вручную. У меня есть служба.   -  person Nelson Rodrigues Marreiros    schedule 04.01.2018


Ответы (2)


У меня была такая же проблема при обновлении с Symfony 3.4 до 4.0. В настоящее время я использую аннотации для маршрутов, чего не было при использовании Symfony 3.

Оказалось, что моя конфигурация маршрутизатора framework.yaml (/config/packages/) была неправильной.

framework: router: resource: "%kernel.root_dir%/config/routing.yml" strict_requirements: ~

На самом деле это была копия/вставка из старого файла config.yml. Поскольку я использую аннотацию для маршрутов, удаление ключа маршрутизатора в конфигурации фреймворка решило мою проблему. Но вам также может понадобиться указать конкретный файл конфигурации маршрутизации в разделе «ресурс».

Вы можете использовать следующую команду, чтобы проверить правильность указанного пути к ресурсу:

php bin/console debug:config framework

Надеюсь, это поможет!

person Gabriel Deschamps    schedule 22.03.2018

Заранее извиняюсь, так как у меня нет фактического ответа, но это не поместится в комментарий.

// From the stack trace
ObjectRouterLoader->load(D:\\blahblah) 

// ObjectRouterLoader::load()
public function load($resource, $type = null)
{
    $parts = explode(':', $resource);
    if (2 != count($parts)) {
        throw new \InvalidArgumentException(sprintf('Invalid resource "%s" passed to the "service" route loader: use the format "service_name:methodName"', $resource));
    }

    $serviceString = $parts[0];
    $method = $parts[1];

    $loaderObject = $this->getServiceObject($serviceString);

Загрузчик объекта маршрута фактически ожидает строку типа service:method. Ваш путь к диску Windows D также имеет двоеточие, поэтому он проходит первоначальную проверку, но затем хочет загрузить службу с именем D.

Так почему же ObjectRouteLoader::load вызывается с недопустимым аргументом? На это я не могу ответить из трассировки стека, но я предполагаю, что у вас есть проблема в вашем приложении Kernel::configureRoutes или, возможно, в одном из ваших файлов route.yaml.

Все, что я могу предложить, это попытаться отменить все, что вы могли сделать, связанное с маршрутом. Если это не поможет, то, возможно, начните с нового скелетного проекта S4 и постепенно перемещайте свое приложение S3.

person Cerad    schedule 04.01.2018
comment
Я перезапущу со свежим проектом скелета Symfony 4, потому что я не нашел, почему он это делает. - person Nelson Rodrigues Marreiros; 04.01.2018