ルーティング設定しているとedit($id)の$idが空になる?
Router::connectでいつも悩む&引っかかるので、
触りたくないなぁっと思っていた時に
少し前のCakePHP勉強会@東京で解りやすい解説があり
だいぶスッキリ理解できた。
極める routes.php (CakePHP 1.2) : akiyan.com
俺も極めたい...
その後しばらく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/*'だけじゃ駄目なのか?
↓
あかん、頭ぐるぐるしてきた