tutorial granted example español annotation php object entity symfony doctrine2

php - granted - symfony login roles



En Symfony2 con Doctrine2, ¿Object=Entity? (2)

Digamos que tengo una clase de User :

$user = new User(1); $user->setName(''Bob''); // save "bob" to database with ID 1 $user->setGender(''Male''); // save "male" to database with ID 1 echo $user->getName(); // display bob echo $user->getGender(); // display "male"; echo $user->getDesignation() // display "Mr. Bob"

Ahora, en Symfony2, con Doctrine2, parece que Entity es un objeto que se utiliza para crear un enlace con la base de datos. Así que creo que todas las setName() , setGender() , getName() y getGender() deberían ir dentro de un archivo que está en el directorio Entity de un Bundle (porque esas funciones UPDATE o SELECT data de la base de datos).

Pero, ¿qué pasa con getDesignation() ?

public function getDesignation() { if ($this->getGender() == ''Male'') return "Mr. ".$this->getName(); else return "Ms. ".$this->getName(); }

¿Está bien poner una función que no tiene ningún vínculo con la base de datos en una Entidad? ¿No es una mala práctica?


¿Está bien poner una función que no tiene ningún vínculo con la base de datos?

Sí, está bien. Pero fíjese bien, todavía está algo "vinculado" a la base de datos ya que utiliza los datos de género y nombre que originalmente provienen de la capa de persistencia (base de datos).

¿No es una mala práctica?

Eso no es una mala práctica, de hecho es algo muy útil. Le ayuda a hacer uso de la capa de persistencia en sus objetos modelo mientras desacopla su código del acceso a la base de datos.


Funciona si su página siempre se muestra en inglés, si necesita traducir el sitio web a otro idioma, tal vez debería crear una clase adicional para manejar con el traductor de Symfony y la entidad a fin de obtener títulos multilingües. Otro enfoque más simple sería devolver solo el título de la persona "señor". en una función separada como:

public function getDesignation() { if ($this->getGender() == ''Male'') return "Mr." else return "Ms."; }

Porque podrías traducirlo fácilmente en tu plantilla {{entity.designation | trans}}

De todos modos, solo quería contribuir un poco, pero la respuesta corta sería: Sí, puedes usar la entidad para manejar métodos extra-moda más allá de los getters básicos.

Saludos