Sluggable Behavior を紹介しましたが、実は Sluggable Behavior を使わずににスラグを含んだ URL を作る簡単な方法があります。ユニークな ID とか全然気にしなくてもよく、タイトルとかにまったく関係ない言葉を使うことも可能です。

echo $html->link(
    __('View', true),
    array(
        'action'=>'view',
        $post['Post']['id'],
        Inflector::slug($post['Post']['title'])
    )
);


$post['post']['title]='sun limited mt'
だとすると
/posts/view/5/sun-limited-mt
というリンクが生成されます。

これだけです。view アクションは普通に

function view($id=null) {

}

とかで大丈夫です。

Inflector::slug() に渡す値を好きに返られるのでどんなスラグでも OK です。
ただ、日本語のようなマルチバイト文字は urlencode しても %-(ハイフン)に変換されてしまうので使えません。

関連する投稿