ルーティング設定しているとedit($id)の$idが空になる?

Router::connectでいつも悩む&引っかかるので、
触りたくないなぁっと思っていた時に
少し前のCakePHP勉強会@東京で解りやすい解説があり
だいぶスッキリ理解できた。


極める routes.php (CakePHP 1.2) : akiyan.com

極めたいw CakePHPのルーティング

俺も極めたい...


その後しばらくCakePHPに殆ど触れずにいたけど、今日から再開できることになり
「よ〜っし!先ずはルーティング設定全部見直すぞう!!!」と
はりきってたけど、また引っかかるorz


routes.phpの設定

// 設定-1
Router::connect(
	'/admin/:controller/:action/:id', 
	array('prefix' => 'admin', 'admin' => true), 
	array('id' => '[0-9]+')
);
// 設定-2
Router::connect(
	'/admin/:controller/:action/*',
	array('prefix' => "admin",
	'action' => 'index', 'admin' => true)
);

コントローラの admin_editメソッド

function admin_edit($id = null) {
	// 処理〜
}

これで「/admin/hoges/edit/1」とアクセスすると
何故かモデルのデータが取得されない。何故?

var_dump($id);で確認すると$idがnullになっている様子。

pr($this->params);を実行してパラメータを確認すると

Array
(
    [pass] => Array
        (
        )

    [named] => Array
        (
        )

    [controller] => hoges
    [action] => admin_edit
    [id] => 1
    [plugin] => 
    [prefix] => admin
    [admin] => 1
    [form] => Array
        (
        )

    [url] => Array
        (
            [url] => admin/hoges/edit/1
        )

    [models] => Array
        (
            [0] => Hoge
        )

)

と、なるのでidはちゃんと渡ってる様子(?)
だから

function admin_edit($id = null) {
	$id = $this->params['id'];
	// 処理〜
}

こうすると取得できるが....なんで〜?
routes.phpの「設定-1」を外すと問題なく取得できるので、
「設定-1」がまずいのか?

「:id」を指定した場合は$this->paramsで取得しなあかんのか?
そんなわけないでしょう...たぶん。


09.07.01追記
[id]に値があっても駄目みたい。
[pass]にArray([0] => 1)みたいにIDが入ってないと駄目っぽい。
じゃあなんで入らない?

cake/libs/router.phpをじーっと眺めてると
[pass]には入らない感じ...うーん

よく考えたら、何で「設定-1」みたいなのが必要なんだろう?
そもそも'/admin/:controller/:action/*'だけじゃ駄目なのか?

あかん、頭ぐるぐるしてきた