2012-09-11 6 views
7

Ich habe einen Weg, der wie folgt aussieht:Wie verhindert man, dass Controller und Aktion in CakePHP in URL kommen?

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

und andere wie folgt aus:

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

für das, was die erste nicht übereinstimmt. In der 'contents' Aktion des 'Alben' Controllers kümmere ich mich selbst um die Paginierung - was bedeutet, dass ich den benannten Parameter 'page' abrufe. Eine URL für die zweite Route würde wie folgt aussehen: http://somesite.com/Album/foo-bar/page:2

Die oben aufgeführte URL tatsächlich funktioniert, aber wenn ich versuche, den HTML-Helper (url, Link), um eine URL wie diese zu verwenden, fügt es den Controller und Aktion zum Anfang, so: http://somesite.com/albums/contents/Album/foo-bar/page:2

Was ich nicht mag. Der Code, der die Htmlhelper verwendet, ist als solche:

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

Antwort

2

unter URL anzeigen wird sehr helfen, voll zu Ihnen

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

Oder es

Parameter an lesen Aktion

Wenn Sie Routen mithilfe von Routenelementen verbinden, möchten Sie möglicherweise, dass geroutete Elemente Argumente übergeben werden. Durch den Einsatz des dritten Argument von Router :: connect() Sie, welche Route Elemente sollten auch zur Verfügung gestellt werden als bestanden Argumente definieren:

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

Und nun, dank der Reverse-Routing-Fähigkeiten, können Sie passieren in das URL-Array wie unten und Cake weiß, wie man die URL wie in den Routen definiert bildet:

// 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

Ich war gezwungen, eine andere Lösung zu verwenden. Kennzeichnen Sie Ihre Antwort immer noch als korrekt. – r0nny1l