[ZendFramework]URLを実際のものとは違うカタチで表示する方法

2011年07月06日

フェスティバ!!でも使ってますが、本来は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件

  1. コメントはありません。
投稿者名
E-Mail

メールアドレスは公開いたしません
URL
コメント

トラックバック:0件

  1. トラックバックはありません。
ページのトップへ

artprojectteam & festiva Tweet

Loading..