Quber
@Quber
PHP Team lead

Как в Symfony 2 вызвать Entity Manager в KnpMenu?

Есть сервис реализующий Breadcrumbs с помощью KnpMenu
services:
    app.one:
        class: App\AdminBundle\Menu\BreadscampBuilder
        arguments:
            - ["@knp_menu.factory"]
    app.breadcrumb:
        class: Knp\Menu\MenuItem
        factory_service: app.one
        factory_method: createBreadcrumbMenu
        arguments: ["@request"]
        scope: request
        tags:
            - { name: knp_menu.menu, alias: breadcrumb }

И класс, отвечающий за его формирование:
namespace App\AdminBundle\Menu;

use Knp\Menu\FactoryInterface;
use Symfony\Component\HttpFoundation\Request;

class BreadscampBuilder
{
    private $factory;

    /**
     * @param FactoryInterface $factory
     */
    public function __construct(FactoryInterface $factory)
    {
        $this->factory = $factory;
    }

    public function createBreadcrumbMenu(Request $request)
    {
         // Как тут вызвать entityManager ?
     }

        return $menu;
    }
}

Как в данном классе вызвать Entity Manager?
На stackoverflow.com подсказывают добавить следущее:
protected $entityManager;

    public function __construct($entityManager)
    {
        $this->entityManager = $entityManager;
    }

И в сервисе добавить агрумент:
arguments:
    entityManager: "@doctrine.orm.entity_manager"

Но я не могу сообразить как добавить его в сервис при моём раскладе. Помогите пожалуйста.
  • Вопрос задан
  • 3326 просмотров
Решения вопроса 2
GHua
@GHua
Та что-ж такое, исправить не могу сообщение.

app.one:
        class: App\AdminBundle\Menu\BreadscampBuilder
        arguments:
             - ["@knp_menu.factory", @doctrine.orm.entity_manager]
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
1) не завязывайте ваш этот breadcumbs-builder на entity manager, вы можете зарегистрировать нужный репозиторий для нужной вам энтити как сервис и работать с ним напрямую. Чем меньше ваш сервис знает о других сервисах тем лучше.

2) @GHua привел вам решение, которое должно работать (рекомендую еще тайпхинтинг применить для $entityManager так же как это сделано для $factory). Если оно у вас не работает - вы кэш чистили?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы