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
Diario de aprendizaje del framework CakePHP. Otras notas de desarrollo y diseño web, realizado sobre Mac.
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
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
/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í:
Pero que nosotros podríamos usar así:
Que sería el equivalente de
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.
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.
Suscribirse a:
Entradas (Atom)