Un ‘Helper‘ de CakePHP es una clase que se utiliza para compartir diferente lógica de la aplicación entre las vistas de la misma.
Imaginemos que queremos tener un sitio en la aplicación donde generar la ruta de las imágenes. Es decir, partimos del nombre de una imagen y queremos obtener la ruta en el servidor a la misma. Una solución sería poner esta ruta cada vez que se añade una nueva imagen, ¿pero qué ocurre si tenemos que cambiar la carpeta donde están alojadas nuestras imágenes en el servidor?. Pues este problema se resuelve con el uso de un ‘Helper’ que nos devuelva la ruta a la carpeta de imágenes que tengamos configurada. Así si en algún momento se modifica la ubicación de esta carpeta únicamente habría que editar un único fichero y todas las imágenes de la aplicación cogerían esta nueva ruta que se configurase en el Helper de CakePHP.
El código de este ejemplo sería el siguiente, primero creando el helper, luego configurando el ‘Controller’ y finalmente utlizándolo desde una de las vistas de la aplicación.
Creación del helper
Creamos un fichero que llamaremos ‘ImageHelper.php’ en la carpeta ‘~/app/View/Helper/‘ con el siguiente contenido, llamar a la clase igual que el nombre del fichero creado:
1 <?php
2 /* /app/view/helper/ImageHelper.php */
3 4 class ImageHelper extends AppHelper {5 function getRutaImagenes() {6 return "/image/carpeta1/carpeta1a";7 }
8 }
9 ?>
Configurar controladores para utilizar el Helper
1.- Configurar helper para todas las vistas de un controlador
Para poder utilizar este nuevo ‘Helper‘ desde alguna de las vistas primero debemos añadir en el controlador de dicha vista la siguiente línea, indicando los ‘helpers’ que se utilizan:
1 class GaleriaController extends AppController {2 var $helpers = array('Image');3 4 // .... resto de variables y funciones del Controlador
5 }
Como se observa en el código se añade la variable ‘var $helpers‘ indicando en el array el nombre de los que se utilizarán por el controlador y las vistas que lo renderizan. Una cosa que se podría hacer si este ‘Helper’ va a ser común a toda la aplicación es meter esta línea en el fichero ‘AppController‘ para que así pueda ser utilizado desde todas las vistas, independientemente del controlador de la vista que lo esté llamando.
Si el ‘Helper’ se ha creado en algún plugin, habría que anteponer el nombre del plugin al añadirlo a la variable ‘helpers’. Por ejemplo, si hemos creado el ‘helper’ en un plugin llamado ‘Galeria’, entonces habría que nombra al ‘helper’ de esta forma:
1 var $helpers = array('Galeria.Image');
2.- Configurar helper para una única vista de un controlador
También puede ser que nos interese únicamente configurar un helper para una función del controlador. Para hacer esto únicamente habría que definir dicho helper dentro del método de la función del controlador de esta forma:
1 class GaleriaController extends AppController {2 function index(){3 $this->helpers[] = 'Image';4 }
5 6 function login(){7 // En el método login no está definido el helper Image
8 }
9 }
En el código anterior se observan dos métodos. El primero de ellos ‘index‘, tiene definido el helper ‘Image‘, por lo que desde la vista se podrán llamar a las funciones que estén configuradas en dicho helper. Por el contrario, la segunda función ‘login‘ no podrá realizar llamadas al helper ‘Image’ ya que este sólo fue definido en el primer método.
Uso del Helper desde la vista
Una vez que ya lo tenemos configurado vamos a ver un ejemplo de cómo utilizar este nuevo ‘Helper’ desde una de las vistas. Siguiendo con el ejemplo, tenemos una imagen que queremos mostrar, partiendo del nombre y obteniendo la ruta que hemos configurado en el helper. Para ello añadiremos la siguiente línea:
1 <img src="<?= $this->Image->getRutaImagenes.'/mi_imagen.png ?>" />
Esta línea llamará al método ‘getRutaImagenes‘ del helper ‘Image‘, devolviendo como resultado la ruta que hemos configurado a la carpeta de las imágenes, quedando finalmente la imagen creada de este modo:
1 <img src="/image/carpeta1/carpeta1a/mi_imagen.png" />
Ahora con cambiar la ubicación que se ha configurado en el ‘Helper’ ya quedaría cambiada en todas las imágenes.
Deja tu comentario