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]+' ) )