Mostrando entradas con la etiqueta router. Mostrar todas las entradas
Mostrando entradas con la etiqueta router. Mostrar todas las entradas

lunes, 23 de abril de 2012

Construyendo un permalink con el Router

Se supone que un Permalink es una URL que apunta a un recurso y que no va a cambiar con el tiempo, o dicho de otro modo, es la URL que nos lleva siempre a cierto recurso dentro de una web. Debe ser una URL absoluta.

En CakPHP la URL habría que construirla obteniendo la URL básica del sitio, añadiendo el controlador, la acción y los parámetros necesarios para identificar ese recurso.

En el supuesto de tener un modelo Post, con un campo "slug" (un slug actúa como un id significativo para un post, generado a partir de su título, lo que hace url del tipo /posts/view/el_libro_de_petete), puedes hacerlo así (este código está en la vista view del post):

Router::url(array ($post['Post']['slug']), true);

Es decir, al router nos basta pasarle dos parámetros: un array con datos sobre la URL y un flag para indicarle si queremos una URL absoluta o relativa.

La gracia del router es que es capaz de averiguar qué controlador y acción tiene que utilizar para completar la URL. En el ejemplo, el código está en la vista para la acción View del controlador Posts. Pero si estoy generando el Router en otra parte, podría pasarle

domingo, 25 de enero de 2009

URL mejoradas con rutas personalizadas

La idea es la siguiente. A veces la estructura /controller/action/arguments de algunas URL de Cake son poco significativas para los usuarios. Es un detalle que a veces me resulta un poco molesto y en particular para un proyecto que tengo entre manos. Por ejemplo. Supongamos que tengo un CMS y quiero mostrar los comentarios a un post. Una posible URL sería:

/posts/show_comments/slug_del_post

Una URL mucho mejor sería

/posts/slug_del_post/show_comments

Esto se puede conseguir definiendo una ruta de la siguiente manera:

Router::connect('/posts/:slug/:action/*', array('controller' => 'posts'), array('pass' => array('slug')));

Ahora, la segunda URL nos dispara la acción show_comments del Posts controller y como extra, le pasa el argumento slug, de modo que la puedes definir así:

function show_comments ($slug) {...}

Todo esto sacado del manual

domingo, 10 de junio de 2007

El router de la 1.2 (atualizado): indicar URL como arrays

He estado leyendo un artículo de Andy Dawson sobre el router de CakePHP 1.2.

El router, entre otras cosas, es el que se encarga de gestionar las URL de Cake, permitiéndole intrepretar sus características /controlador/accion/[parametros]. Pero también, desde la versión 1.2, se puede aprovechar para generar esas mismas URL desde el código de manera inteligente, sin tener que pensar dónde estoy exactamente.

Para eso usamos un array, que en su forma completamente desarrollada viene siendo así:

$url = array (
CAKE_ADMIN=>false,
'plugin'=>false,
'controller'=>'Post',
'action'=>'view',
)


Pero que nosotros podríamos usar así:

$url = array {
'action' = 'edit',
12
}

Que sería el equivalente de

$url = '/controller/edit/12';

Y que podríamos emplear en un $html->link (), por ejemplo, o en otros métodos que necesiten una URL.


Ventajas

La principal, que hacemos que sea Cake quien se encargue de formar correctamente las URL.

Por otro lado, el código se hace más transportable y genérico. Ideal para helpers.

En consecuencia, he empezado a migrar mis URL internas al formato array.

Ojo con requestAction

Por lo que veo, requestAction no soporta las url en forma de array. Así no me funcionan a mí los elements.