Vamos a ver como crear rutas y pasar valores por URL en Zend Framework 2.
Así se crean nuevas rutas, definiendo un array como este dentro del array ‘routes’ del module.config.php del módulo. En el le indicamos que tipo de ruta es normalmente “Segment” y podemos definir una ruta fija o que sea variable en función del método action incluso del nombre del módulo y controlador. También le indicamos mediante una expresión regular que caracteres se permiten en la url. En “defaults” a que controlador pertenece esta ruta y que método action saltará por defecto.
Para pasar valores por la url sin utilizar $_GET, hay que configurar los segmentos de url.
Añadimos un id a la ruta que tengamos definida en module.config.php
Esto lo podemos hacer en rutas hijas y en rutas normales.
Se puede llamar id o como se quiera.
Podemos añadir tantos segmentos opcionales como queramos separándoles por corchetes tal que así:
'route' => '/[:controller[/:action][/:id][/:id2][/:id3]]',
También podemos añadir segmentos obligatorios de esta forma:
'route' => '/[:controller[/:action][/:id/:id2/:id3]]',
En el array de constraints podemos validar con una expresión regular cada uno de los parámetros que le pasemos por la url.
'id' => '[0-9]*', 'id2' => '[a-z]*', 'id3' => '[1-5a-z]*',
El controlador:
<?php namespace Application\Controller; use Zend\Mvc\Controller\AbstractActionController; use Zend\View\Model\ViewModel; class PruebasController extends AbstractActionController{ public function indexAction(){ return new ViewModel(); } public function verProductoAction(){ //Recogemos el valor de la ruta $id=$this->params()->fromRoute("id",null); /* *Le podemos indicar el tipo de dato que va a ser *$id=(int)$this->params()->fromRoute("id",null); */ $nombre="Producto número: ".$id; return new ViewModel( array("nombre"=>$nombre) ); } }
Y lo imprimimos en la vista
<h1><?php echo $this->nombre ?></h1>
Más información:
Documentación oficial de Zend Framework 2