Podemos reenrutar cualquier url para que nos vaya a un controlador específico. Esto nos evita tener que poner nombres específicos a los controladores, entre otras cosas.
La configuración está en /app/config/routes.php y usa el siguiente formato:
Router::connect(
'URL',
array('nombreParam' => 'valorPorDefecto'),
array('nombreParam' => 'expresionRegular')
)
Por ejemplo, si yo tengo el controlador ‘entradas’ para ver las entradas pero quiero acceder también con ‘posts’ podría hacer lo siguiente:
Router::connect(
'/posts',
array('controller' => 'entradas', 'action' => 'index')
);
Router::connect(
'/:controller/:id', array('action' => 'view'), array(
'pass' => array('id'),
'id' => '[0-9]+'
)
);
Otros ejemplos:
Router::connect(
'/contacto', array('controller' => 'pages', 'action' => 'display', 'contacto')
);
Router::connect(
'/vendedores/:action/*', array('controller' => 'proveedores')
);
Este ejemplo sencillo muestra cómo crear una manera sencilla de ver registros desde cualquier controlador accediendo a un URL que luce como /mincontrolador/id. El URL suministrado a connect() especifica dos elementos de enrutamiento, :controller e :id, El primer elemento es uno que viene por defecto con CakePHP, así que el enrutador sabe cómo reconocer nombres de controladores en el URL. El elemento :id es propio, y debe ser clarificado especificando una expresión regular en el tercer parámetro de conenct(). Esto le dice a CakePHP cómo reconocer el ID en el URL en contraposición a cualquier otra cosa que esté allí, como el nombre de una acción.
En este ejemplo cambiamos la manera de pasar parámetros:
Router::connect(
// E.g. /blog/3-CakePHP_Rocks
'/blog/:id-:slug',
array('controller' => 'blog', 'action' => 'ver'),
array(
// el orden importa, puesto que esto enviará ":id" como el parámetro $articuloID de tu acción.
'pass' => array('id', 'slug'),
'id' => '[0-9]+'
)
)