En el capítulo anterior vimos como reescribir url's amigables, en esta ocasión veremos como pasar parámetros a través de la url y validarlos.
Empezamos abriendo el archivo de configuración del módulo -> module.config.php que se encuentra en la ruta ...
y vemos la siguiente parte de código ...
/* Parte para validar las url's - parámetros */
'may_terminate' => true,
'child_routes' => array(
'default' => array(
'type' => 'Segment',
'options' => array(
/* esto ha sido cambiado */
/* 'route' => '/[:controller[/:action]]', */
'route' => '[:action[/:id]]',
'constraints' => array(
/* controller ya no es necesario ver los valores de 'route' */
/* 'controller' => '[a-zA-Z][a-zA-Z0-9_-]*', */
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
/* parametro nuevo */
'id' => '[0-9]*'
),
'defaults' => array(
),
/* Parte para validar las url's - parámetros */
Esta parte en concreto, es la que permite añadir nuevos segmentos a la url, las partes que han sido cambiadas están marcadas con comentarios ...
'route' => '[:action[/:id]]' : Esta línea indica los valores que serán aceptados en la url, podemos ver tanto :action que es el nombre de la vista, como :id que es un nuevo parámetro.
'contraints' : Es un array dónde son validados los valores de 'route'
/* 'controller' => '[a-zA-Z][a-zA-Z0-9_-]*', */, esta línea de código ya no es necesaria ya que las url's ya son amigables y apuntan a la raiz del servidor. Prueben navegando a ... http://tutorial-zend.localhost/application/demo/index -> devolverá un error.
'action' => '[a-zA-Z][a-zA-Z0-9_-]*' : Validación de la variable action, recuerden que action recibe el nombre de las vistas, sólo permite letras de la a la z tanto mayúsculas como minúsculas, números y guiones.
'id' => '[0-9]*' : validación del nuevo parámetro id, sólo acepta números.
Ahora prueba navegando a ...
http://tutorial-zend.localhost/fotos/1 -> correcto
http://tutorial-zend.localhost/fotos/hola -> error
Al introducir hola en el parámetro id devolverá un error, ya que sólo acepta números.
El nuevo parámetro id podría recibir valores de una base de datos, pero aun no hemos tocado este tema, así que haremos uso del archivo auxiliar FunctionsDemoController.php que creamos en un capítulo anterior, en esta ocasión lo utilizaremos para simular una base de datos conectada al controlador de la vista fotos.
Abrimos el archivo, que se encuentra en la ruta C:\xampp\htdocs\tutorial-zend\module\Application\src\Application\Controller\FunctionsDemoController ...
Y agregamos dos nuevas funciones una imagenes($id) y otra count_imagenes($count) ...
/* imagenes */
function imagenes($id)
{
switch ($id)
{
case 1:
return "<img src='http://www.blog.bluemarkets.es/wp-content/uploads/2012/10/php_logo.jpg'>";
break;
case 2:
return "<img src='http://walllook.com/images/jquery_logo.jpg'>";
break;
default:
return "Seleccione una imagen";
break;
}
}
function count_imagenes($count)
{
$resultado = "";
$x = 1;
while ($x <= $count)
{
$resultado .= "<a href='http://tutorial-zend.localhost/fotos/$x'>Seleccionar imagen $x</a><br>";
$x++;
}
return $resultado;
}
/* imagenes */
La función imagenes consiste en un switch que dependiendo del valor de id delvoverá una imagen u otra.
La función count_imagenes es un bucle para el número de imágenes, se mostrará un link para cada una de ellas.
Ahora tenemos que conectar estas nuevas funciones entre el controlador y la vista, recuerden que esto se hace a través del modelo ViewModel que se encuentra en el controlador, abrimos DemoController.php que se encuentra en la ruta -> C:\xampp\htdocs\tutorial-zend\module\Application\src\Application\Controller
Modificar el código del controlador fotos por este nuevo ...
public function fotosAction()
{
$parametro = interactua_php("fotos");
/*nuevo*/
$id = (int)$this->params()->fromRoute("id", 1);
$imagenes = imagenes($id);
$count_imagenes = count_imagenes(2);
/*nuevo*/
return new ViewModel(array(
"interactua_php" => $parametro,
/*nuevo*/
"id" => $id,
"imagenes" => $imagenes,
"count_imagenes" => $count_imagenes
/*nuevo*/
));
}
La parte nueva consiste en ...
$id = (int)$this->params()->fromRoute("id", 1/*este es el valor por defecto*/) : Crea una variable llamada $id que obtiene el valor del parámetro id que creamos anteriormente en module.config.php
$imagenes = imagenes($id) : Se hace uso de la función imágenes que recibirá el valor del "id"
$count_imagenes = count_imagenes(2) : Indicamos que sólo hay dos imágenes, los links apuntarán a id=1 y id=2
Luego los incluimos en el Array ViewModel para poderlo conectar con la vista fotos.
El siguiente paso es modificar la vista fotos.phtml, que se encuentra en la ruta -> C:\xampp\htdocs\tutorial-zend\module\Application\view\application\demo
Cambiar el antiguo código por este nuevo ...
<h1>Te encuentras en la vista fotos</h1>
<h3><?php echo $this -> interactua_php ?></h3>
<label>Selecciona una vista ...</label>
<ul>
<li><a href="http://tutorial-zend.localhost/">vista index</a>
<li><a href="http://tutorial-zend.localhost/fotos">vista fotos</a>
<li><a href="http://tutorial-zend.localhost/musica">vista musica</a>
</ul>
<h3>El valor del parámetro id es = <?php echo $this->id ?></h3>
<?php echo $this->count_imagenes ?>
<?php echo $this->imagenes ?>
Bien ahora sólo queda comprobarlo en el navegador http://tutorial-zend.localhost/fotos, haz click en los links de las imágenes ...
OK, podemos ver como a través del nuevo parámetro "id" el controlador devuelve una imagen u otra dependiendo de su valor, esto puede ser útil para mostrar artículos, noticias, etc, más adelante veremos como conectar a una base de datos mediante ZEND. Saludos.
1 comentario:
No funciona lo he probado y no funciona, salta un error
Publicar un comentario