Symfony 2.0 получает сервис внутри объекта

Я ищу и не могу найти ответ. У меня есть ролевая модель базы данных в моем приложении. Пользователь может иметь роль, но эта роль должна храниться в базе данных.

Но тогда пользователю необходимо добавить роль по умолчанию из базы данных. Итак, я создал сервис :

<?php

namespace Alef\UserBundle\Service;

use Alef\UserBundle\Entity\Role;

/**
 * Description of RoleService
 *
 * @author oracle
 */
class RoleService {

    const ENTITY_NAME = 'AlefUserBundle:Role';

    private $em;

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

    public function findAll()
    {
        return $this->em->getRepository(self::ENTITY_NAME)->findAll();
    }

    public function create(User $user)
    {
        // possibly validation here

        $this->em->persist($user);
        $this->em->flush($user);
    }

    public function addRole($name, $role) {
        if (($newrole = findRoleByRole($role)) != null)
            return $newrole;
        if (($newrole = findRoleByName($name)) != null)
            return $newrole;

        //there is no existing role
        $newrole = new Role();
        $newrole->setName($name);
        $newrole->setRole($role);

        $em->persist($newrole);
        $em->flush();

        return $newrole;
    }

    public function getRoleByName($name) {
        return $this->em->getRepository(self::ENTITY_NAME)->findBy(array('name' => $name));
    }

    public function getRoleByRole($role) {
        return $this->em->getRepository(self::ENTITY_NAME)->findBy(array('role' => $role));
    }

}

, мой services.yml— :

alef.role_service:
    class: Alef\UserBundle\Service\RoleService
    arguments: [%doctrine.orm.entity_manager%]

, и теперь я хочу использовать его в двух местах: UserControllerи Userсущности. Как я могу получить их внутри сущности? Что касается контроллера, я думаю, что мне просто нужно:

$this->get('alef.role_service');

Но как получить услугу внутри объекта?

36
задан Kaminari 26 April 2012 в 09:29
поделиться