SERVICE こんな事ができます

CNTACT ご相談はお気軽に

 ABOUT US こんな会社です



2010/08/05 by マッチー

TwitterみたいなURL表示にしたい

twitterをやっている方はご存知だと思いますが、twitterでユーザーのプロフィールページに行くと、URLは↓こんな感じになっていますよね。

CakePHPで開発をしている場合、普通は、ドメイン名の下にはコントローラー名が来ます。で、その下にはアクション名が来ます。だからあるコントローラーのあるアクションを呼び出せば、URLは例えば↓こんな感じになるでしょうか。

これをtwitterと同じような表示にしたい。果たしてそんなことが可能なのかというと、可能のようです。

世の中、たいていのことは頑張れば可能になるみたいですね。世界中のカラスを白く染め上げることも、ものすごい頑張れば可能なのかもしれません。それを100%立証することは不可能ですけれど、まあそんなことはどうでもいいです。

例えば、usersというコントローラーにprofileというアクションを設け、そこでユーザーのプロフィールページを表示させたいとします。その場合は、routes.phpに以下の一文を書きます。

この『:name』というのがポイントのようです。こうやっておくと、twitterみたいにドメイン名の下にユーザー名を書けば、usersコントローラーのprofileが呼ばれます。

上記の場合だと$this->params['url']['url']にmacchiという文字列が入って来るので、あとはそれを好きに使ってあれこれ処理すればOKです。

ただし、こういう設定にすると、例えばusersのindexを呼びたいときに『http://test.com/users』と書いても、indexメソッドを呼んではくれません。『users』というユーザー名だと認識して、profileメソッドが呼ばれます。だからこの設定にしてしまったら、indexメソッドを呼び出す場合もindexを省略せずに書くしかない(http://test.com/users/index)……と思っているのですが、何か回避策とかあるのかしら?

まあ、仮にusersという文字列が来たときだけusersコントローラーのindexを見に行くように設定したら、本当に『users』というユーザー名の人がいたときに、その人のプロフィールページ見れないもんね。だから仕方ないのかな……。