symfony service -- Ошибка You have requested a non-existent service
Primary tabs
Проблема
В неопределённый момент перестали работать сервисы с ошибкой:
You have requested a non-existent service "..."
Сам сервис описан так:
// app/config/services.yml
// AppBundle/src/Service/ServiceClassName.php
В процессе отладки выяснилось, что было удалено (не вручную, механизм неизвестен) несколько параметров из parameters.yml . Параметры как раз необходимые для сервисов. Но удалились без определённой логики: два параметра одного сервиса и один - другого.
Также было отмечено, что при запуске composer install те же параметры удаляются вновь, даже если их ввести вручную заново.
Решение ошибки composer-а
Итак, удаление параметров и композер оказались не связанными с вышеуказанной ошибкой сервиса. О том, что происходит с parameters.yml, можно прочитать здесь.
Решение ошибки сервиса
Сервис не удалось определить, т.к. конфигурация сервисов (services.yml) была прописана в основной директории проекта: /app/config/services.yml, а следует создать отдельный файл для описания сервисов бандла внутри самого бандла: /src/AppBundle/Resources/config/services.yml. И подключать его в основном файле app/config/config.yml таким образом:
imports: - { resource: '@AppBundle/Resources/config/services.yml' }
Теперь такой код вызова в контроллере работатет:
use AppBundle/Service/ServiceClassName; public function someAction() { $service = $this->get('service.name'); $result = $service->method(); // ... }
- Log in to post comments
- 14363 reads
vedro-compota
Thu, 12/14/2017 - 15:04
Permalink
соображения
обычно всё-таки сам своб конфигурацию движок не правит, либо же существуют файлы которые правятся чисто вручную. Если те же параметры удаляются композером -- значит надо смотреть в сторону композера.
Более того -- ваш файл вообще лежит в контроле версий?
Убедитесь, что композер правит его, временно забрав права на запись именно на этот файл -- даже если композер его правит (а других аномалий не наблюдается), это уже повод беспокоиться и выяснить почему это так. И можно ли вообще в этот файл писать что-то руками. Вообще это интересная ситуация. безусловно.
_____________
матфак вгу и остальная классика =)
melisa
Thu, 12/14/2017 - 15:39
Permalink
файл в .gitignore
файл в .gitignore
vedro-compota
Thu, 12/14/2017 - 16:27
Permalink
тогда там точно нельзя ничего
тогда там точно нельзя ничего править руками. Ведь это не заработает на боевом сервере. Или это просто ваш локальный конфиг? Каково вообще его значение в системе, надо это выяснить.
_____________
матфак вгу и остальная классика =)
melisa
Thu, 12/14/2017 - 17:20
Permalink
файл игнорируется при отправке данных в удалённый репозиторий
файл игнорируется при отправке данных в удалённый репозиторий, а на боевом сервере, он есть и обновляется
vedro-compota
Thu, 12/14/2017 - 17:42
Permalink
каким образом он обновляется
каким образом он обновляется на боевом сервере? как локальный конфиг?
Но обычно в таких файлвх держат только пароли и адреса но никак не конфигурацию классов, если он там обновляется автоматически, то значит (95%) что его вручную править нельзя.
_____________
матфак вгу и остальная классика =)
melisa
Thu, 12/14/2017 - 18:30
Permalink
нельзя править вручную?
а как пароли и адреса туда попадут?
мой сервис использует емейл и пароль для отправки сообщений, поэтому они и передаются в качестве параметров
vedro-compota
Thu, 12/14/2017 - 22:08
Permalink
а как пароли и адреса туда
дело в том, что:
у вас же другой случай, судя по всему.
речь о том что если файл правится автоматчески скиптом, то обычно он не правится руками. Или-или (закон исключенного третьего, обычно работает))
_____________
матфак вгу и остальная классика =)
vedro-compota
Thu, 12/14/2017 - 16:29
Permalink
скорее всего после вызова
скорее всего после вызова композер инсталл модули сами правят его в порядке какой-то очереди, предварительно возможно удаляется вообще всё. А потом они записывают то что им нужно. Или что-то типа того. Но это конечно надо выяснять.
_____________
матфак вгу и остальная классика =)
melisa
Fri, 12/15/2017 - 23:03
Permalink
спасибо, так и вышло
спасибо, так и вышло.