• Inicio
  • Web
  • Contacto
El Blog del desarrollador
Menu
  • Inicio
  • Web
  • Contacto
Inicio › General › Zend Framework 2 › Combinando TableGateway, Hydrator y sus estrategias en Zend Framework 2

Combinando TableGateway, Hydrator y sus estrategias en Zend Framework 2

malakana 15 septiembre, 2015     Sin Comentarios    

Obtenemos el adaptador de la Base de datos con el Localizador de servicio

$sm = $this->getServiceLocator();
$dbAdapter = $sm->get('DbAdapter');

Instanciamos el Hydrator y Modelo que hidrataremos

$hydrator = new \Zend\Stdlib\Hydrator\ObjectProperty();
$tag = new \Application\Model\Tag();

Añadimos una estrategia personalizada al hydrator para la propiedad tag de nuestro modelo para este caso como es más rápido he hecho uso de la clase para definir estrategias mediante closures, decir que existe también otros hydratadores predefinidos como ArraySerializable y ClassMethods entre otros

$hydrator->addStrategy('tag', new \Zend\Stdlib\Hydrator\Strategy\ClosureStrategy(
    //Función que gestiona la estrategia de extracción
    function($value){

        return($value);

    },
    //Función que gestiona la estrategia de hidratacíón
    function($value){

        //Al tag obtenido de la base de datos le concatenamos una url
        $value = 'http://programadormalaga.es/'.$value;
        return($value);

    }

));

Generamos un ResultSet con la clase HydratingResultSet que realice la hidratación pasándole como parametros el modelo y el hydrator

$resultSet = new \Zend\Db\ResultSet\HydratingResultSet(
    $hydrator, $tag
);

Instanciamos TableGateway con toda la configuración que hemos hecho y extraemos los registros

$tableGateway = new \Zend\Db\TableGateway\TableGateway('tags',$dbAdapter,null,$resultSet);
$registros = $tableGateway->select();

Pasamos el resultado a la vista

return new ViewModel(array('tags' => $registros ));

Acción completa:

public function TableGatewayHydratorAction()
{

   $sm = $this->getServiceLocator();
    $dbAdapter = $sm->get('DbAdapter');

    $hydrator = new \Zend\Stdlib\Hydrator\ObjectProperty();
    $tag = new \Application\Model\Tag();

    $hydrator->addStrategy('tag', new \Zend\Stdlib\Hydrator\Strategy\ClosureStrategy(
        //Función que gestiona la estrategia de extracción
        function($value){

            return($value);

        },
        //Función que gestiona la estrategia de hidratacíón
        function($value){

            //Al tag obtenido de la base de datos le concatenamos una url
            $value = 'http://programadormalaga.es/'.$value;
            return($value);

        }

    ));

    $resultSet = new \Zend\Db\ResultSet\HydratingResultSet(
        $hydrator, $tag
    );

    $tableGateway = new \Zend\Db\TableGateway\TableGateway('tags',$dbAdapter,null,$resultSet);
    $registros = $tableGateway->select();

    return new ViewModel(array('tags' => $registros ));
}

En nuestra vista:

foreach ($this->tags as $key => $value) {           

    echo $value->getTag()."<br/>";

}

Fuente de documentación: Matthew Setter Blog

General Zend Framework 2
HydratorTablegatewayZend Framework 2

 Previous Post

Leyendo feed de datos en Zend Framework 2

― 10 septiembre, 2015

Next Post 

Usando Oauth 2 junto con Slim Framework para crear API segura: Parte 1

― 28 septiembre, 2015

malakana

Autor: malakana

Desarrollador web freelance, aprendedor

Related Articles

Leyendo feed de datos en Zend Framework 2
Extendiendo Twig en Zend Framework 2

Deja un comentario Cancelar comentario

Autor

malakanaMalakanaDesarrollador web freelance, aprendedor

  • F
  • t
  • G
  • l

Temas

  • Doctrine 2 (1)
  • General (6)
  • Oauth 2 (2)
  • Slim Framework (3)
  • Zend Framework 2 (3)

Busca

Diego Domínguez Blog / ProgramadorMalaga.com