¿Cómo evitar que el controlador y la acción aparezcan en URL en cakephp?
routing cakephp-1.2 (1)
Tengo una ruta que se ve así:
Router::connect(''/Album/:slug/:id'',array(''controller'' => ''albums'', ''action'' => ''photo''),array(''pass'' => array(''slug'',''id''),''id'' => ''[0-9]+''));
y otro como este:
Router::connect(''/Album/:slug/*'',array(''controller'' => ''albums'',''action'' => ''contents''),array(''pass'' => array(''slug'')));
para lo que no coincide con el primero. En la acción de ''contenidos'' del controlador de ''álbumes'', yo mismo me encargo de la paginación, lo que significa que recupero el parámetro llamado ''página''. Una URL para la segunda ruta se vería así: http://somesite.com/Album/foo-bar/page:2
La URL de arriba funciona, pero cuando trato de usar HTML Helper (url, link) para generar una url como esta, agrega el controlador y la acción al principio, así: http://somesite.com/albums/ contenido / Álbum / foo-bar / página: 2
Que no me gusta El código que usa HtmlHelper es como tal:
$html->url(array(''/Album/'' . $album[''Album''][''slug''] . ''/page:'' . $next))
Ver la URL a continuación es muy útil para usted
http://book.cakephp.org/2.0/en/development/routing.html
O léelo
Pasar parámetros a la acción
Al conectar rutas utilizando elementos de ruta, es posible que desee que los elementos enrutados se pasen argumentos en su lugar. Al usar el tercer argumento de Router :: connect () , puede definir qué elementos de ruta también deberían estar disponibles como argumentos pasados:
<?php
// SomeController.php
public function view($articleId = null, $slug = null) {
// some code here...
}
// routes.php
Router::connect(
''/blog/:id-:slug'', // E.g. /blog/3-CakePHP_Rocks
array(''controller'' => ''blog'', ''action'' => ''view''),
array(
// order matters since this will simply map ":id" to $articleId in your action
''pass'' => array(''id'', ''slug''),
''id'' => ''[0-9]+''
)
);
Y ahora, gracias a las capacidades de enrutamiento inverso, puede pasar la matriz de url como a continuación y Cake sabrá cómo formar la URL como se define en las rutas:
// view.ctp
// this will return a link to /blog/3-CakePHP_Rocks
<?php
echo $this->Html->link(''CakePHP Rocks'', array(
''controller'' => ''blog'',
''action'' => ''view'',
''id'' => 3,
''slug'' => ''CakePHP_Rocks''
));