2012-09-11 14 views
7

que tienen una ruta que tiene este aspecto:¿Cómo evitar que el controlador y la acción aparezcan en URL en cakephp?

Router::connect('/Album/:slug/:id',array('controller' => 'albums', 'action' => 'photo'),array('pass' => array('slug','id'),'id' => '[0-9]+')); 

y otro como esto:

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

por lo que no coincide con la primera. 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 de la segunda vía sería el siguiente: http://somesite.com/Album/foo-bar/page:2

la URL anterior de hecho funciona, pero cuando trato de utilizar el asistente de HTML (url, enlace) para dar salida a una URL como esta, añade el controlador y acción al principio, así: http://somesite.com/albums/contents/Album/foo-bar/page:2

Lo que no me gusta. El código que utiliza el HtmlHelper es como tal:

$html->url(array('/Album/' . $album['Album']['slug'] . '/page:' . $next)) 

Respuesta

2

Ver abajo url es muy ayudar completo a usted

http://book.cakephp.org/2.0/en/development/routing.html

O leyó

Paso de parámetros a acción

Al conectar rutas utilizando elementos de ruta, es posible que desee que los elementos enrutados se pasen argumentos en su lugar. Al utilizar el argumento de la tercera Router :: connect() puede definir qué elementos de ruta también debería estar disponible 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 inversa, puede pasar en 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' 
)); 
+0

Me vi obligado a utilizar una solución diferente. Aún marcando tu respuesta como correcta. – r0nny1l

Cuestiones relacionadas