Im searing over y no puedo encontrar la respuesta. Tengo un modelo de función de base de datos en mi aplicación. El usuario puede tener un rol, pero este rol debe almacenarse en la base de datos.Servicio de obtención de Symfony 2.0 dentro de la entidad
Pero el usuario debe tener un rol predeterminado agregado desde la base de datos. Así que he creado un servicio:
<?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));
}
}
mi services.yml
es:
alef.role_service:
class: Alef\UserBundle\Service\RoleService
arguments: [%doctrine.orm.entity_manager%]
Y ahora quiero utilizarlo en dos lugares: UserController
y User
entidad. ¿Cómo puedo obtenerlos dentro de la entidad? En cuanto a controlador creo que sólo hay que:
$this->get('alef.role_service');
Pero Forma de obtener servicio dentro entidad?
Esa es la mejor solución y la respuesta más precisa para la pregunta. Odio las respuestas como "no se puede", "es un patrón de diseño tan equivocado" o "¡Arruinará todo, idiota!" escrito por gurús de la nada. "Peor es (a veces) mejor";) Gracias de nuevo. –
Tristemente, "patrón de diseño incorrecto", "modelo de MCV", "capa de negocios separada", etc. salen por la ventana cuando el "jefe" quiere que se haga "en este momento". Gracias por la respuesta @Kai, es lo que estaba buscando. –