Служба не найдена: даже если она существует в контейнере приложения - PullRequest
0 голосов
/ 27 мая 2019

Что у меня есть:

services.yaml * * 1004

app.foo.bar:
    class: App\Foo\Bar
    arguments: #[ ... ]

Контроллер:

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class MyController extends Controller
{
    public function baz(Request $request)
    {
        $this->get('some_bundle.some_service');
    }
}

И это работает.

Но так как Symfony\Bundle\FrameworkBundle\Controller\Controller устарел, я попытался расширить Symfony\Bundle\FrameworkBundle\Controller\AbstractController и получил

Служба "some_bundle.some_service" не найдена: даже хотя он существует в контейнере приложения, контейнер внутри «App \ Controller \ MyController» - это меньший сервисный локатор который знает только о «доктрине», «http_kernel», «parameter_bag», службы "request_stack", "router", "serializer" и "session". Пытаться вместо этого используется внедрение зависимостей.

Можно ли как-нибудь использовать get() с AbstractController? AbstractController использует ControllerTrait, интересно, почему происходит ошибка.

1 Ответ

0 голосов
/ 27 мая 2019

В symfony4 многое изменилось по сравнению с предыдущими версиями.Вы используете все как в предыдущей версии.Быстрое решение не является «предпочтительным» способом, но для запуска можно изменить ключ public со значения по умолчанию false на true в вашем файле services.yaml.

Лучше оставитьэто личное и использовать вместо этого внедрение зависимостей.Изменилось и название службы (теперь только путь службы).Смотри документы здесь .Для вашего кода попробуйте следующее:

// services.yaml

services:
    _defaults:
        autowire: true
        autoconfigure: true
        public: false

    App\Foo\Bar:
        tags: { ** }

И контроллер с внедрением зависимости:

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class MyController extends AbstractController
{
    public function baz(Request $request, Bar $bar)
    {
        $bar->doSomething();
    }
}

Есть хороший учебник об этих вещах (и больше) здесь .

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