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













