Home > CakePHP > cakephpのルーティングで「hoge.com/ユーザ名」の様なすっきりしたマイページのURLを作る

cakephpのルーティングで「hoge.com/ユーザ名」の様なすっきりしたマイページのURLを作る

2007年09月25日

tynny!を作ってる際につまずいた事で、
マイページのURIを「http://tynny.net/ユーザ名」みたいにしたいといった事がありました。

del.icio.usでは「http://del.icio.us/ユーザ名/」
hatenaでは「http://d.hatena.ne.jp/ユーザ名/」
がいわばマイページのトップになっています。

cakephpで同じ事を実装しようとすると、デフォルトでは
「http://tynny.net/xxx」の時は「xxx」というコントローラークラスを読み込もうとしてしまいます。
自分としては「xxx」というコントローラーが無い場合、ユーザ名「xxx」のマイページを表示したいのですが。。

自分のとった対処方法を書いておきます。
かなり強引というかやっつけ方法なのでオススメはできませんが…

routes.php

 	//既に作成済みのコントローラーを配列に納めとく。
 	$reservednames=array('members', 'posts', 'entries', 'tags'); 

 	//リクエストされたコントローラ名を取得
 	if(! empty($fromUrl)) list($request_controller) = explode("/", $fromUrl); 

	if(! empty($request_controller)){
		//リクエストされたコントローラ名がサイトで使用されてなければ、、、
		if(array_search($request_controller, $reservednames) ===false){
			//リクエストされたコントローラ名をユーザ名として、
			//マイページ用のコントローラとアクションにアクセスする
			Router::connect('/*', array('controller' => 'users', 'action' => 'index'));
		}
	}

ほら、強引。。

問題は
$reservednamesに使用しているコントローラを入れ忘れる可能性がある。
今の所不具合はおきていませんが、htmlヘルパーなどで参照するURLまわりで不具合が起きるかも?

cakephpのルーティングで「hoge.com/ユーザ名」を実現する方法がありそうな気もしますが、探すのに挫折して上記の方法をとっています…

他の対処方法として、
院生エンジニアのにっき CakePHPで存在しないcontrollerが指定された際にデフォルトのcontrollerクラスを利用する方法
という記事もありました。
詳しく解決方法が掲載されていますので、同じ問題にぶつかってる方は是非。

CakePHP

  1. No comments yet.
  1. No trackbacks yet.