7

次のようなルートが1つあります。

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

そしてこのような別のもの:

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

最初のものと一致しないもののために。'albums'コントローラーの'contents'アクションでは、ページ付けを自分で処理します。つまり、名前付きパラメーター'page'を取得します。2番目のルートのURLは次のようになります: http ://somesite.com/Album/foo-bar/page:2

上記のURLは確かに機能しますが、HTMLヘルパー(url、link)を使用して次のようなURLを出力しようとすると、次のようにコントローラーとアクションが先頭に追加されます。http: //somesite.com/albums/コンテンツ/アルバム/foo-bar/ page:2

私は好きではありません。HtmlHelperを使用するコードは次のとおりです。

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

1 に答える 1

2

以下のURLを参照してください。これは非常に役立ちます。

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

またはそれを読む

パラメータをアクションに渡す

ルート要素を使用してルートを接続する場合、代わりにルーティングされた要素に引数を渡すことができます。Router :: connect()の3番目の引数を使用することにより、渡された引数として使用できるようにするルート要素を定義できます。

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

そして今、逆ルーティング機能のおかげで、以下のようにurl配列を渡すことができ、Cakeはルートで定義されたURLを形成する方法を知っています。

// 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'
));
于 2012-09-14T11:46:49.530 に答える