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