2

私のケーキのURLは次のようなものです:

$token = '9KJHF8k104ZX43';

$url = array(
    'controller' => 'users',
    'action' => 'password_reset',
    'prefix' => 'admin',
    'admin' => true,
    $token
)

これを次のようなきれいな URL にルーティングしたいと思います。

/admin/password-reset/9KJHF8k104ZX43

ただし、最後のトークンをオプションにして、誰かがトークンを提供しない場合でもルーティングされるようにしたいと思います。

/admin/password-reset

このケースをキャッチして、別のページにリダイレクトしたり、メッセージを表示したりできるようにします。

ルーティングに関する本をよく読みましたが、複雑なケースを完全に理解できる方法で適切に説明しているとは思えないので、どこに行けばよいのかわかりません。何かのようなもの:

Router::connect('/admin/password-reset/:token', array('controller' => 'users', 'action' => 'password_reset', 'prefix' => 'admin', 'admin' => true));

オプションでトークンをキャッチしてURLに渡す方法がよくわかりません。

4

1 に答える 1

7

名前付きパラメーターを使用する必要があります。私のプロジェクトの例

Router::connect('/:type/:slug', 
        array('controller' => 'catalogs', 'action' => 'view'), 
        array(
            'type' => '(type|compare)', // regex to match correct tokens
            'slug' => '[a-z0-9-]+', // regex again to ensure a valid slug or 404
            'pass' => array(
                'slug', // I just want to pass through slug to my controller
            )
        ));

次に、私の見解では、スラッグを通過させるリンクを作成できます。

echo $this->Html->link('My Link', array('controller' => 'catalogs', 'action' => 'view', 'type' => $catalog['CatalogType']['slug'], 'slug' => $catalog['Catalog']['slug']));

私のコントローラーアクションは次のようになります。

public function view($slug) {
    // etc
}
于 2013-08-01T08:43:16.657 に答える