1

CakePHP のルートに問題があります。説明させてください。

コンポーネントによる認証を使用していAuthます。というルーティング プレフィックスがありますaccount

ユーザーを編集したいときは、ユーザーコントローラーを呼び出して、次のような URL を取得します。

/account/users/edit/5

私が欲しいのは、次のようなURLを持つことです:

/account/edit/5

そこで、ルーターを次のように変更しました。

Router::connect('/:prefix/edit/:id',
    array('controller' => 'users', 'action' => 'edit'),
    array('pass' => array('id'), 'id' => '[0-9]+')
);

アクセスしようとするとうまくいきました/account/edit/5

私の問題は私の見解にあります。Html->linkヘルパーを使用してこのルートにアクセスするにはどうすればよいですか?

これまでのところ、私は次のようにしています:

'/'.$this->Session->read('Auth.User.role').'/edit/'.$this->Session->read('Auth.User.id')

しかし、私の意見では、それは本当にきれいではありません。ヘルパーを使いたい。

助けてくれてどうもありがとう

4

2 に答える 2

1

接頭辞「account」を使用すると、コントローラーで「account_edit」のようなアクションが必要になります。それはおそらくあなたが望むものではありません。また、セッションに既にあるのに、なぜ「id」をURLに入れるのですか? すべてのユーザーに URL "/account" を使用して、アクションのセッションから ID (および必要に応じてロール) を取得しないのはなぜですか?

Router::connect('/account',
    array('controller' => 'users', 'action' => 'edit')
);

これは、必要な URL を生成するクリーンな方法です。

$this->Html->link('Account', array(
    'controller' => 'users',
    'action' => 'edit'
));
// Will return url "/account"

一般に、常に配列形式を使用して URL を指定し、逆ルーティングの恩恵を受けます。

于 2013-04-06T08:15:58.500 に答える
0

ルーター以外はすべて問題ありません。そのはず

Router::connect('/account/*',
    array('controller' => 'users', 'action' => 'edit')
);

ここで確認できるヘルパーを使用してさまざまな方法でアンカーリンクを作成します

于 2013-04-06T08:48:27.710 に答える