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

zf2 + conf local

Estas en el tema de zf2 + conf local en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Que tal amigos del foro, estoy tratando de implementar la authentication en ZF2 y me estoy basando en la doc oficial dice que tengo que ...
  #1 (permalink)  
Antiguo 04/10/2012, 17:42
Avatar de timoteo666  
Fecha de Ingreso: agosto-2011
Ubicación: /home/Gdl
Mensajes: 242
Antigüedad: 13 años, 2 meses
Puntos: 11
Busqueda zf2 + conf local

Que tal amigos del foro, estoy tratando de implementar la authentication en ZF2 y me estoy basando en la doc oficial dice que tengo que crear la conexion a la base de datos, y la pregunta es como accedo a los datos que tengo guardados en config/autoload/local.php?? que en este archivo ya tengo los datos de acceso a la base de datos
__________________
( + ) lineas de código ( - ) televisión
  #2 (permalink)  
Antiguo 04/10/2012, 18:06
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: zf2 + conf local

La configuración la puedes obtener del service manager, esta bajo la key Config, después basta con acceder a la key del array, un ejemplo:

local.php
Código PHP:
Ver original
  1. return array(
  2.     'username' => 'masterpuppet'
  3. );

Module.php
Código PHP:
Ver original
  1. public function onBootstrap($e)
  2. {
  3.     $config   = $e->getApplication()->getServiceManager()->get('Config');
  4.     $username = $config['username'];
  5.     ...
  6. }

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 04/10/2012, 22:42
Avatar de timoteo666  
Fecha de Ingreso: agosto-2011
Ubicación: /home/Gdl
Mensajes: 242
Antigüedad: 13 años, 2 meses
Puntos: 11
Respuesta: zf2 + conf local

@masterpuppet muchas gracias por la respuesta voy a checar y comento.

Saludos.
__________________
( + ) lineas de código ( - ) televisión
  #4 (permalink)  
Antiguo 05/10/2012, 11:15
Avatar de timoteo666  
Fecha de Ingreso: agosto-2011
Ubicación: /home/Gdl
Mensajes: 242
Antigüedad: 13 años, 2 meses
Puntos: 11
Respuesta: zf2 + conf local

Gracias masterpuppet me ha funcionado a la perfeccion, solo unas dudas por que tiene que estar dentro de onBootstrap? y como le paso este dato a un controller?

Cita:
Iniciado por masterpuppet Ver Mensaje
La configuración la puedes obtener del service manager, esta bajo la key Config, después basta con acceder a la key del array, un ejemplo:

local.php
Código PHP:
Ver original
  1. return array(
  2.     'username' => 'masterpuppet'
  3. );

Module.php
Código PHP:
Ver original
  1. public function onBootstrap($e)
  2. {
  3.     $config   = $e->getApplication()->getServiceManager()->get('Config');
  4.     $username = $config['username'];
  5.     ...
  6. }

Saludos.
__________________
( + ) lineas de código ( - ) televisión
  #5 (permalink)  
Antiguo 05/10/2012, 11:29
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: zf2 + conf local

No necesariamente, lo puedes leer también en el controller:
Código PHP:
Ver original
  1. $config = $this->getEvent()->getApplication()->getServiceManager()->get('Config');

Saludos.
  #6 (permalink)  
Antiguo 05/10/2012, 11:31
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: zf2 + conf local

No tiene porque estar en el onBootstrap, es solo un ejemplo ;), para obtener el dato desde el controller tienes que hacer lo mismo, obtener el alias Config del service manager y luego acceder a la key del array, algo así:
Código PHP:
Ver original
  1. public function fooAction()
  2. {
  3.     $config   = $this->getServiceLocator()->get('Config');
  4.     $username = $config['username'];
  5.     ...
  6. }

Edit: se me adelanto GatorV, de todas formas dejo la versión corta:)

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 05/10/2012, 11:48
Avatar de timoteo666  
Fecha de Ingreso: agosto-2011
Ubicación: /home/Gdl
Mensajes: 242
Antigüedad: 13 años, 2 meses
Puntos: 11
Respuesta: zf2 + conf local

@GatorV, @masterpuppet cualquier de las dos respuesta me funciona a la perfeccion, muchas gracias por su ayuda.

Saludos.
__________________
( + ) lineas de código ( - ) televisión
  #8 (permalink)  
Antiguo 05/10/2012, 12:07
Avatar de timoteo666  
Fecha de Ingreso: agosto-2011
Ubicación: /home/Gdl
Mensajes: 242
Antigüedad: 13 años, 2 meses
Puntos: 11
Respuesta: zf2 + conf local

Estoy haciendo prubas desde mi controller autAction y el codigo que tengo hasta el momento es el siguiente, es correcto como lo estoy haciendo??

Código PHP:
Ver original
  1. //Obtengo datos de configuracion
  2.         $config = $this->getServiceLocator()->get('Config');
  3.         //datos de acceso a la BD
  4.         $midb = $config['db'];
  5.         //creo el Dbadaptador
  6.         $dbAdapter = new DbAdapter($midb);
  7.         //creo el adaptador Auth
  8.         $authAdapter = new AuthAdapter($dbAdapter);
  9.        
  10.         $authAdapter
  11.             ->setTableName('users')
  12.             ->setIdentityColumn('username')
  13.             ->setCredentialColumn('password')
  14.         ;
  15.        
  16.         $authAdapter
  17.         ->setIdentity('ususrio1')
  18.         ->setCredential('passwordSuperSeguroxD')
  19.         ;
  20.  
  21.         $result = $authAdapter->authenticate();
__________________
( + ) lineas de código ( - ) televisión
  #9 (permalink)  
Antiguo 05/10/2012, 12:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: zf2 + conf local

Mmmm no, la idea es que uses precisamente el ServiceManager para instanciar tu objeto DB, también puedes usarlo para que te de el objeto Auth ya listo...

Esa es la idea del ServiceManager, puedes leer esto: http://zend-framework-community.6341...td4584632.html
  #10 (permalink)  
Antiguo 05/10/2012, 12:42
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: zf2 + conf local

Te sugiero que le des un vistazo a https://github.com/ZF-Commons/ZfcUser, gran parte de lo que muestras debería estar encapsulado en un service.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #11 (permalink)  
Antiguo 05/10/2012, 13:12
Avatar de timoteo666  
Fecha de Ingreso: agosto-2011
Ubicación: /home/Gdl
Mensajes: 242
Antigüedad: 13 años, 2 meses
Puntos: 11
Respuesta: zf2 + conf local

GatorV esto es a lo que te refieres?

Código PHP:
        //Obtengo datos de configuracion
        
$config $this->getEvent()->getApplication()->getServiceManager()->get('Configuration');
        
//datos de acceso a la BD
        
$midb $config->db->toArray(); 
Cita:
Iniciado por GatorV Ver Mensaje
Mmmm no, la idea es que uses precisamente el ServiceManager para instanciar tu objeto DB, también puedes usarlo para que te de el objeto Auth ya listo...

Esa es la idea del ServiceManager, puedes leer esto: http://zend-framework-community.6341...td4584632.html
__________________
( + ) lineas de código ( - ) televisión
  #12 (permalink)  
Antiguo 05/10/2012, 13:41
Avatar de timoteo666  
Fecha de Ingreso: agosto-2011
Ubicación: /home/Gdl
Mensajes: 242
Antigüedad: 13 años, 2 meses
Puntos: 11
Respuesta: zf2 + conf local

Gracias por la ayuda masterpuppet, me comentas que debe estar encapsulado en un service, como hago este?? Y algo que no comprendo es por que si lo estoy haciendo como en la doc oficial no es la mejor forma?

Cita:
Iniciado por masterpuppet Ver Mensaje
Te sugiero que le des un vistazo a https://github.com/ZF-Commons/ZfcUser, gran parte de lo que muestras debería estar encapsulado en un service.

Saludos.
__________________
( + ) lineas de código ( - ) televisión
  #13 (permalink)  
Antiguo 05/10/2012, 14:44
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: zf2 + conf local

Lee el link que te dejo @masterpuppet, y revisa el Module.php, ahí puedes ver como declaran la configuración del ServiceManager.

Saludos.
  #14 (permalink)  
Antiguo 05/10/2012, 15:19
Avatar de timoteo666  
Fecha de Ingreso: agosto-2011
Ubicación: /home/Gdl
Mensajes: 242
Antigüedad: 13 años, 2 meses
Puntos: 11
Respuesta: zf2 + conf local

Gracias GatorV, creo que ya voy comprendiendo mas, en mi Module.php en la funciona getServicesConfig agregue lo siguiente

Código PHP:
Ver original
  1. public function getServiceConfig() {
  2.         return array(
  3.             'factories' => array(
  4.                 'ZendSkeletonModule\Model\OperacionTable' => function($sm) {
  5.                     $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
  6.                     $table = new OperacionTable($dbAdapter);
  7.                     return $table;
  8.                 },
  9.                 'Db'=>function($sm){
  10.                     $config = $sm->get('config');
  11.                     return $config['db'];
  12.                 },
  13.             ),
  14.         );
  15.     }

Y en mi controller lo llamo de la siguiente manera

Código PHP:
Ver original
  1. $midb = $this->getEvent()->getApplication()->getServiceManager()->get('Db');

es correcto??

Cita:
Iniciado por GatorV Ver Mensaje
Lee el link que te dejo @masterpuppet, y revisa el Module.php, ahí puedes ver como declaran la configuración del ServiceManager.

Saludos.
__________________
( + ) lineas de código ( - ) televisión
  #15 (permalink)  
Antiguo 05/10/2012, 15:27
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: zf2 + conf local

Pues ahí solo estas regresando una key, la idea es que regreses objetos, tal como lo estas haciendo con ZendSkeletonModule\Model\OperacionTable, que extraes el DbAdapter y se lo inyectas, la idea del ServiceManager es que te deje un objeto ya listo para trabajar.
  #16 (permalink)  
Antiguo 05/10/2012, 16:06
Avatar de timoteo666  
Fecha de Ingreso: agosto-2011
Ubicación: /home/Gdl
Mensajes: 242
Antigüedad: 13 años, 2 meses
Puntos: 11
Respuesta: zf2 + conf local

A ver si comprendi, seria de la sigiuiente forma?

Código PHP:
Ver original
  1. public function getServiceConfig() {
  2.         return array(
  3.             'factories' => array(
  4.                 'ZendSkeletonModule\Model\OperacionTable' => function($sm) {
  5.                     $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
  6.                     $table = new OperacionTable($dbAdapter);
  7.                     return $table;
  8.                 },
  9.                 'Db'=>function($sm){
  10.                     $config = $sm->get('config');
  11.                     $dbAdapter = new DbAdapter($config['db']);
  12.                     $authAdapter = new AuthAdapter($dbAdapter);
  13.                     return $authAdapter;
  14.                 },
  15.             ),
  16.         );
  17.     }

Cita:
Iniciado por GatorV Ver Mensaje
Pues ahí solo estas regresando una key, la idea es que regreses objetos, tal como lo estas haciendo con ZendSkeletonModule\Model\OperacionTable, que extraes el DbAdapter y se lo inyectas, la idea del ServiceManager es que te deje un objeto ya listo para trabajar.
__________________
( + ) lineas de código ( - ) televisión
  #17 (permalink)  
Antiguo 05/10/2012, 16:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: zf2 + conf local

Exacto, ahora sí vas entendiendo mejor, solo checa el nombre ya que no es Db si estas buscando un authAdapter, por otro lado puedes obtener el adapter usando $sm->get('Zend\Db\Adapter\Adapter') en lugar de instanciarlo nuevamente.

Saludos.
  #18 (permalink)  
Antiguo 08/10/2012, 16:25
Avatar de timoteo666  
Fecha de Ingreso: agosto-2011
Ubicación: /home/Gdl
Mensajes: 242
Antigüedad: 13 años, 2 meses
Puntos: 11
Respuesta: zf2 + conf local

Que tal asi, ya seteando la tabla y los campos, es mejor esta opcion?

Código PHP:
Ver original
  1. public function getServiceConfig() {
  2.         return array(
  3.             'factories' => array(
  4.                 'ZendSkeletonModule\Model\OperacionTable' => function($sm) {
  5.                     $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
  6.                     $table = new OperacionTable($dbAdapter);
  7.                     return $table;
  8.                 },
  9.                 'mi_authentication' => function($sm){
  10.                     $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
  11.                     $authAdapter = new AuthAdapter($dbAdapter);
  12.                     $authAdapter->setTableName('users')
  13.                                 ->setIdentityColumn('username')
  14.                                 ->setCredentialColumn('password');
  15.                     return $authAdapter;
  16.                 },
  17.             ),
  18.         );
  19.     }

Entonces donde yo tengo mi_authentication ya existe un nombre preestablecido para esto?? si es asi donde lo encuentro?

Cita:
Iniciado por GatorV Ver Mensaje
Exacto, ahora sí vas entendiendo mejor, solo checa el nombre ya que no es Db si estas buscando un authAdapter, por otro lado puedes obtener el adapter usando $sm->get('Zend\Db\Adapter\Adapter') en lugar de instanciarlo nuevamente.

Saludos.
__________________
( + ) lineas de código ( - ) televisión
  #19 (permalink)  
Antiguo 08/10/2012, 22:46
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: zf2 + conf local

¿a que te refieres con un nombre preestablecido?
  #20 (permalink)  
Antiguo 09/10/2012, 09:25
Avatar de timoteo666  
Fecha de Ingreso: agosto-2011
Ubicación: /home/Gdl
Mensajes: 242
Antigüedad: 13 años, 2 meses
Puntos: 11
Respuesta: zf2 + conf local

Es que unos post mas arriba mencionas esto:

solo checa el nombre ya que no es Db si estas buscando un authAdapter

entonces no se si ya hay algo preestablecido para reemplazar a Db o si yo asigno esta parte?

Cita:
Iniciado por GatorV Ver Mensaje
¿a que te refieres con un nombre preestablecido?
__________________
( + ) lineas de código ( - ) televisión
  #21 (permalink)  
Antiguo 09/10/2012, 09:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: zf2 + conf local

¿Como reemplazar a Db? Lo que te estoy diciendo es solo que seas coherente en tus nomenclaturas, sí lo que quieres es regresar un AuthAdapter, no lo llames Db, ya que ese no es su función, es como si hicieras esto:
Código PHP:
Ver original
  1. function suma($a, $b) {
  2.       return $a - $b;
  3. }

Sí te fijas la función se llama suma, pero te regresa una resta, viene a ser lo mismo con el nombre de tu factory, sí se llama Db y te regresa un AuthAdapter pues no es consistente, ¿entiendes?.

Saludos.
  #22 (permalink)  
Antiguo 09/10/2012, 10:31
Avatar de timoteo666  
Fecha de Ingreso: agosto-2011
Ubicación: /home/Gdl
Mensajes: 242
Antigüedad: 13 años, 2 meses
Puntos: 11
Respuesta: zf2 + conf local

Jajaja si tienes razon, solo que habia puesto Db por que esta haciendo pruebas ya depues lo cambie a mi_authentication, y que tan conveniente es setear la tabla y los campos en esta parte? o es mejor hacerlo en el controller


Cita:
Iniciado por GatorV Ver Mensaje
¿Como reemplazar a Db? Lo que te estoy diciendo es solo que seas coherente en tus nomenclaturas, sí lo que quieres es regresar un AuthAdapter, no lo llames Db, ya que ese no es su función, es como si hicieras esto:
Código PHP:
Ver original
  1. function suma($a, $b) {
  2.       return $a - $b;
  3. }

Sí te fijas la función se llama suma, pero te regresa una resta, viene a ser lo mismo con el nombre de tu factory, sí se llama Db y te regresa un AuthAdapter pues no es consistente, ¿entiendes?.

Saludos.
__________________
( + ) lineas de código ( - ) televisión
  #23 (permalink)  
Antiguo 09/10/2012, 10:50
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: zf2 + conf local

La idea del ServiceFactory es esa , que te devuelva tus objetos ya listos para usarlos, es en el ServiceFactory donde levantas y configuras tú objeto para que quede listo para trabajar.

Saludos.

Etiquetas: conf, framework, local, php, zf2
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 08:59.