Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

como puedo agregar un hasMutator en yaml con doctrine

Estas en el tema de como puedo agregar un hasMutator en yaml con doctrine en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, en un post anterior aprendi sobre yaml y como usarlo todo esta va de maravilla pero ahora tengo un problema que ya solucioné de ...
  #1 (permalink)  
Antiguo 31/01/2011, 14:52
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 5 meses
Puntos: 4
como puedo agregar un hasMutator en yaml con doctrine

Hola, en un post anterior aprendi sobre yaml y como usarlo todo esta va de maravilla pero ahora tengo un problema que ya solucioné de una forma pero creo que no es la mas correcta.

Bien en yaml tengo esta definicion:
Código PHP:
Ver original
  1. usuario:
  2.   actAs:
  3.     [Timestampable]
  4.   columns:
  5.     id:
  6.       type: integer(10)
  7.       primary: true
  8.       autoincrement: true
  9.     username:
  10.       type: string(255)
  11.       unique: true
  12.     password:
  13.       type: string(255)
  14.     email:
  15.       type: varchar(255)
  16.       unique: true


esto no genera lo que dice en el ejemplo que sigue abajo:
Código PHP:
Ver original
  1. <?php
  2. class User extends Doctrine_Record {
  3.  
  4.     public function setTableDefinition() {
  5.         $this->hasColumn('username', 'string', 255, array('unique' => 'true'));
  6.         $this->hasColumn('password', 'string', 255);
  7.         $this->hasColumn('email', 'string', 255, array('unique' => 'true'));
  8.  
  9.     }
  10.  
  11.     public function setUp() {
  12.         $this->setTableName('user');
  13.         $this->actAs('Timestampable');
  14.         $this->hasMutator('password', '_encrypt_password');
  15.     }
  16.  
  17.     protected function _encrypt_password($value) {
  18.         $salt = '#*seCrEt!@-*%';
  19.         $this->_set('password', md5($salt . $value));
  20.     }
  21. }

La solucion que encontre es agregar las filas que faltan en la clase base del modelo usuario y me funciona, pero bajo la perspectiva de que tengo que genera las clases bases con yaml esto no se generaria.
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com
  #2 (permalink)  
Antiguo 01/02/2011, 04:24
Avatar de historiasdemaria  
Fecha de Ingreso: septiembre-2010
Ubicación: www
Mensajes: 433
Antigüedad: 13 años, 7 meses
Puntos: 54
Respuesta: como puedo agregar un hasMutator en yaml con doctrine

Por lo visto en yaml no se puede agregar un mutator, tienes que crear un behaviour, que despues puedes agregar al fichero yaml

Mira por aqui: http://stackoverflow.com/questions/4...ne-yaml-schema
  #3 (permalink)  
Antiguo 01/02/2011, 10:15
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 5 meses
Puntos: 4
Respuesta: como puedo agregar un hasMutator en yaml con doctrine

Gracias por tu respuesta, umm pero como es eso de crear un behaviour, al leer ese articulo con lo que entendi es agregar el método en una clase yo sopongo que es la misma clase base que genera el yaml y entonces eso es lo que yo aplique.

O no es así?
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com
  #4 (permalink)  
Antiguo 01/02/2011, 12:18
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: como puedo agregar un hasMutator en yaml con doctrine

Tenes que crear el behavior:

Código PHP:
Ver original
  1. class EncryptTemplate extends Doctrine_Template
  2. {
  3.     public function setUp()
  4.     {
  5.         $this->hasMutator('password', '_encrypt_password');
  6.     }
  7.  
  8.     public function _encrypt_password
  9.     ....
  10. }

y luego agregarlo al yml:

Código YML:
Ver original
  1. usuario:
  2.   actAs:
  3.     [Timestampable, EncryptTemplate]
  4.   columns:
  5.     id:
  6.       type: integer(10)
  7.       primary: true
  8.       autoincrement: true
  9.     username:
  10.       type: string(255)
  11.       unique: true
  12.     password:
  13.       type: string(255)
  14.     email:
  15.       type: varchar(255)
  16.       unique: true

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 01/02/2011, 13:50
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 5 meses
Puntos: 4
Respuesta: como puedo agregar un hasMutator en yaml con doctrine

o gracias, entonces el behavior: lo pongo dentro de models->generated con el nombre encrypttemplate.php??
o dentro de schemas??
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com
  #6 (permalink)  
Antiguo 01/02/2011, 14:36
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: como puedo agregar un hasMutator en yaml con doctrine

Si, lo podes agregar a models con el nombre EncryptTemplate.php las mayúsculas importan, en schemas van únicamente los ficheros YML.
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 04/02/2011, 22:34
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 5 meses
Puntos: 4
Respuesta: como puedo agregar un hasMutator en yaml con doctrine

Hola, continuando con este hilo crei que con colocar EncryptTemplate.php en application->models era suficiente pero no lo es.

genere los modelos, primero sin borrar nada de los directorios models y generated, luego los borre, pero en ambos casos siempre estubo presente EncryptTemplate.php y no logro agregar el hasmutator. Yo creia que cuando llamara a BaseUsers.php y le pasara un password este llamaria a la clase EncryptTemplate, codificaria el valor que lo pase y lo almacenaria en la base de datos pero no fue asi.

Dejo como tengo EncryptTemplate.php exactamente, como dige esta dentro de application->models
Código PHP:
Ver original
  1. class EncryptTemplate extends Doctrine_Template
  2. {
  3.  
  4.     public function setUp(){
  5.         $this->hasMutator('password','_encrypt_password');
  6.     }
  7.  
  8.    
  9.     protected function _encrypt_password($value) {
  10.         $salt = '#*seCrEt!@-*%';
  11.         $this->_set('password',md5($salt.$value));
  12.     }
  13. }
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com
  #8 (permalink)  
Antiguo 05/02/2011, 05:57
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: como puedo agregar un hasMutator en yaml con doctrine

Te esta agregando el behavior a BaseUsuario ?, dentro de esta clase deberias tener algo asi:

Código PHP:
Ver original
  1. public function setUp()
  2. {
  3.     ...
  4.    $encrypttemplate0 = new EncryptTemplate();
  5.    $this->actAs($encrypttemplate0);
  6. }

Comproba que te este agregando correctamente el behavior a la clase base.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #9 (permalink)  
Antiguo 05/02/2011, 14:24
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 5 meses
Puntos: 4
Respuesta: como puedo agregar un hasMutator en yaml con doctrine

hola gracias, no sabia que debia colocarse en la clase base, ahora que lo puesto me genera otro tipo de problemas :).
Código BASH:
Ver original
  1. PHP Fatal error:  Call to undefined method EncryptTemplate::hasMutator() in /var/www/proyect/application/models/generated/EncryptTemplate.php on line 7
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com

Etiquetas: doctrine
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:12.