[Zend Framework] Zend_Controller: ルーティングを変更して、任意のURIでアクセスできるようにする(2)
URIの変更を行う場合に必要なルーティング設定に関して確認します。
今回は Zend_Controller_Router_Route を試してみます。
Zend Framework Version: 1.12.3
下記のようなURIで、該当ユーザーのユーザーページを表示するようなイメージでルーティングしてみます。
http://sample.dev:10088/user/jiro
ダミーを用意
News コントローラの index アクションに、ユーザーのアドレスブックを表示する処理を何となく追加します。
public function indexAction()
{
// action body
$db = Zend_Registry::get('db');
if ($this->getRequest()->getParam('name'))
{
$name = $this->getRequest()->getParam('name');
$select = $db->select()->from('addressbook')->where("name = '{$name}'");
} else {
$select = $db->select()->from('addressbook');
}
$db->setFetchMode(Zend_Db::FETCH_OBJ);
$result = $db->fetchAll($select);
$this->view->assign('result', $result);
}
こんなURIで jiro さんの情報が表示されます。
http://sample.dev:10088/news/index?name=jiro
http://sample.dev:10088/news/index/name/jiro
Zend_Controller_Router_Route
application.ini に設定を追加します。
resources.router.routes.user.type = "Zend_Controller_Router_Route"
resources.router.routes.user.route = "user/:name"
resources.router.routes.user.defaults.module = "default"
resources.router.routes.user.defaults.controller = "news"
resources.router.routes.user.defaults.action = "index"
resources.router.routes.user.defaults.name = ""
上記でこれに置き換わっています。
http://sample.dev:10088/news/index?name=
=> http://sample.dev:10088/user/
:name が動的に値を入れてくれるので、結果、下記で目的を果たせるようになりました。
http://sample.dev:10088/user/jiro