Vamos a ver una manera práctica, fácil y rápida de implementar las URL amigables en nuestro proyecto Zend Framework de cara al posicionamiento utilizando el componente Zend_Controller_Router_Route.

Más concretamente nos centraremos en el Zend_Controller_Router_Route_Regex, por considerar que se trata del más general (hace uso de expresiones regulares por lo que se puede usar casi en todos los casos). Una vez compredido el funcionamiento básico, es recomendable investigar otras formas de uso más específicas para aplicar en determinados proyectos.
Comencemos por añadir a nuestro bootstrap el siguiente código:
$router = $controller->getRouter();
$route = new Zend_Controller_Router_Route_Regex(
‘([^-]*)-([^-]*)\.html’,
array(
‘action’ => ‘index’,
‘controller’ => ‘prueba’,
‘module’ => ‘default’
),
array(
1 => ‘categoria’,
2 => ‘producto’
));
$router->addRoute(‘prueba’, $route);
Hemos supuesto que vamos a recibir una URL del tipo
http://miservidor.com/05-productodeprueba.html
Según la expresión regular que hemos definido, nos daría como resultado un array en el que el primer elemento sería la categoría (en nuestro ejemplo, 05) y el segundo el producto (es decir, productodeprueba).
Nos quedaría definir qué vamos a hacer con este array: para ello definimos la acción index en el controlador prueba del módulo default:
class PruebaController extends Zend_Controller_Action
{
public function init()
{
$this->_helper->viewRenderer->setNoRender(true);
}
public function indexAction()
{
$producto=$this->_getParam(‘producto’);
$categoria=$this->_getParam(‘categoria’);
$this->render(‘index’);
}
}
Una vez recogidos los parámetros, podríamos, por ejemplo, hacer un forward a una determinada acción.
Para terminar, veamos el caso particular que sigue:
$router = $controller->getRouter();
$route = new Zend_Controller_Router_Route_Regex(
‘([^-]*)-([^-]*)-([^-]*)-([^-]*)\.html’,
array(
‘action’ => ‘index’,
‘controller’ => ‘prueba’,
‘module’ => ‘default’
),
array(
1 => ‘module’,
2 => ‘controler’,
3 => ‘action’,
4 => ‘parametro’
));
$router->addRoute(‘prueba’, $route);
Como vemos, hemos asignado como nombre de las variables del array module, controller y action. Es decir, se sobreescribirán los valores de estas variables obteniendo una redirección inmediata a la acción del controlador de dicho módulo. Por ejemplo:
http://miservidor.com/default-index-accion-1.html
será equivalente a escribir
http://miservidor.com/default/index/accion/parametro/1
Las posibilidades son infinitas.
Esperamos que este post os sea útil como inicio en las ‘Friendly URLs’ en ZF.