Crear plugins para controladores en Zend Framework 2

Los plugins nos van a permitir tener pequeñas clases para tareas específicas que podamos reutilizar fácilmente.

Vamos a ver como crear plugins para controladores en Zend Framework 2 de forma muy sencilla.

Crearemos dentro del directorio Controller de nuestro módulo, un directorio llamado Plugin. En meteremos los plugins.

Por ejemplo, voy a crear un plugin que imprima hace cuanto tiempo fue una fecha.

Modulo/src/Controller/Plugin/HaceCuantoPlugin.php

<?php
namespace Modulo\Controller\Plugin;

use Zend\Mvc\Controller\Plugin\AbstractPlugin;

class HaceCuantoPlugin extends AbstractPlugin{
    private $hace;
    
    public function prueba(){
        return "hola";
    }

    public function imprimirTiempo($fecha,$hora){
        $start_date = new \DateTime($fecha." ".$hora);
        $since_start = $start_date->diff(new \DateTime(date("Y-m-d")." ".date("H:i:s")));
        $hace="Hace ";
        if($since_start->y==0){
            if($since_start->m==0){
                if($since_start->d==0){
                   if($since_start->h==0){
                       if($since_start->i==0){
                          if($since_start->s==0){
                             $medida_tiempo= $since_start->s.' segundos';
                          }else{
                              if($since_start->s==1){
                                 $medida_tiempo= $since_start->s.' segundo';  
                              }else{
                                 $medida_tiempo= $since_start->s.' segundos';  
                              }
                          }
                       }else{
                          if($since_start->i==1){
                              $medida_tiempo= $since_start->i.' minuto';  
                          }else{
                            $medida_tiempo= $since_start->i.' minutos'; 
                          }
                       }
                   }else{
                      if($since_start->h==1){
                        $medida_tiempo= $since_start->h.' hora';
                      }else{
                        $medida_tiempo= $since_start->h.' horas'; 
                      }
                   }
                }else{
                    if($since_start->d==1){
                        $medida_tiempo= $since_start->d.' día';
                    }else{
                        $medida_tiempo= $since_start->d.' días'; 
                    }
                }
            }else{
                if($since_start->m==1){
                   $medida_tiempo= $since_start->m.' mes'; 
                }else{
                    $medida_tiempo= $since_start->m.' meses';
                }
            }
        }else{
            if($since_start->y==1){
                $medida_tiempo= $since_start->y.' año';
            }else{
                $medida_tiempo= $since_start->y.' años';
            }
        }
        $this->hace=$hace.$medida_tiempo;
        return $this->hace;
    }
}
?>

Al igual que los controladores, los plugins necesitan ser añadidos en un apartado de la configuración del módulo para que puedan ser invocables. Añadimos la siguiente elemento al array de configuración:

'controller_plugins' => array(
        'invokables' => array(
            'HaceCuantoPlugin' => 'Modulo\Controller\Plugin\HaceCuantoPlugin',
        )
    ),

El controlador:

public function probandoPluginsAction(){
	$HaceCuanto=$this->HaceCuantoPlugin();
	$fecha="01/01/2001";
	$hora="00:04:03";
	echo $HaceCuanto->imprimirTiempo($fecha,$hora);
}

Más información:
http://lab.empirio.no/custom-controller-plugin-in-zf2.html
http://framework.zend.com/manual/2.3/en/modules/zend.mvc.plugins.html

Víctor Robles WEB

Autor: Victor

Desarrollador web - Formador online - Blogger

Compartir este post