0

ページにきれいな URL を持たせたいとしましょう:

構成/routes.php

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

訪問者をそのページに送りたい場合は、次のような URL を使用できます。

$this->redirect('/profile');

$this->Html->link('Your Profile', '/profile');

しかし、気が変わって、URL を次のようにしたいとします。

/account

/profiletoのすべてのインスタンスを変更せずにサイト全体を変更するにはどうすればよい/accountですか?

あるいは...

私の質問をする別の方法は、Cake 配列構文を使用してすべての URL を適切にコーディングするにはどうすればよいかということです (何かをハードコーディングするよりも、これを行う方が好きです)。

$this->redirect(array('controller' => 'users', 'action' => 'profile'));

$this->Html->link('Your Profile', array('controller' => 'users', 'action' => 'profile'));

そして、そのコントローラー/アクションの組み合わせが呼び出されるたびに、人が URL に送信されるようにします。

/profile

そして、このルールを変更可能な 1 つの場所に配置します。何かのようなもの:

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

// Later change to

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

それを行う方法はありますか?また、さらにリクエストパラメータを渡してURLに追加できるようにしますか?

4

1 に答える 1

3

ルーティングのドキュメントをご覧ください: http://book.cakephp.org/2.0/en/development/routing.html

あなたのapp/routes.php追加で:

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

これで、次のようにリンクを作成できます。

echo $this->Html->link('Link to profile', array('controller' => 'users', 'action' => 'profile'));

または、追加のパラメーターを許可する場合:

// When somebody comes along without parameters ...
Router::connect('/profile', array('controller' => 'users', 'action' => 'profile'));
// When somebody parses parameters
Router::connect('/profile/*', array('controller' => 'users', 'action' => 'profile'));

そして、次のようなことができるようになります:

$userId = 12;
echo $this->Html->link('Link to other profile', array('controller' => 'users', 'action' => 'profile', $userId));

その後$userId、次の方法でコントローラーで使用できるようになります。

echo $this->request->params['pass'][0];
// output: 12

このようにして、すべてのビュー/リダイレクトなどを変更することなく、Web サイトの URL を簡単に変更できます。コントローラー名は変更しないでください。それは大いに混乱するからです。賢く選んでください;-)

于 2013-07-16T21:45:12.713 に答える