[ZendFramework]URLを実際のものとは違うカタチで表示する方法
フェスティバ!!でも使ってますが、本来はhttp://hogehoge.jp/user?id=1のようなアドレスをtwitterなどのようにhttp://hogehoge.jp/!/usernameというようなアドレスで表示させる方法。
※ZenfFrameworkでの方法
まず、public/index.phpに独自ルートの構築をします。
1 2 3 4 5 6 7 8 9 10 11 12 13 | //独自ルート用のコンポーネント呼び出し require_once 'Zend/Controller/front.php'; require_once 'Zend/Controller/Router/Route.php'; //独自ルートの構築 $front = Zend_Controller_Front::getInstance(); $router = $front->getRouter(); $route = new Zend_Controller_Router_Route( '!/:username', array('controller'=>'user', 'action'=>'index', 'username'=>null) ); //独自ルートをルータに定義 $router->addRoute('user', $route); |
手順としては、独自ルートのコンポーネントを呼び出し、
どこのコントローラーとどこのアクションをどんなアドレスに変更するかを設定し、
実際に反映できるように定義すればOK
‘username’=>null はデフォルトの値を設定する場合に記述。
デフォルトがない場合はnullにしておく。
上記の場合、userというコントロールのindexアクションのルートを変更しています。
その際のパラメータ名は[username]と設定しています。
http://hogehoge.jp/user?id=1 というアドレスを http://hogehoge.jp/!/abcd というURLで表示できます。
※abcdがusernameパラメータです。
URLルートを変更する場合 http://hogehoge.jp/xxxxx というのは避け、
http://hogehoge.jp/abc/xxxx のように必ず擬似ディレクトリを置くようにしてください。
その際に、絶対に他のコンテンツと同じものにはしないでください。
値を取得する際は下記で取得できます。
上記を例に本来のコントローラー(UserController.php)のindexActionで値を取得
1 2 3 4 | public function indexAction() { $hogehoge = $this->getRequest()->username; } |
余談ですが、「!」は使えましたがtwitterのように「#」は使えませんでした。
制限があるのだろうか??
ちなみに、フェスティバ!!の場合はhttp://www.festiva.biz/!/artprojectteamというように使っています。
コメント:0件
- コメントはありません。
トラックバック:0件
- トラックバックはありません。




