Rutas personalizadas en CakePHP

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