【CakePHP2.0】正しいURLを指定しているのに「Invalid モデル名」とエラーが出る場合

ルーティングを弄っていると、正しいURLを指定してアクセスしているのに「Invalid モデル名」というCakePHPのエラー画面が出て進めなくなってしまうことがあった。
しばらくして理由を考えてみると、以下のようなURL指定が原因だった。

Router::connect('/admin/managers/:id',           array('controller' => 'managers', 'action' => 'view'), array('pass' => array('id')));

これは、/admin/managers/の後にIDを付加してアクセスする形式で、例えば「/admin/managers/3」とあればIDが3のマネージャの情報を表示することを想定しているわけだが、「/admin/managers/create」のようなURLでアクセスした場合、IDが「create」のマネージャの情報を表示しようとするため、エラーが発生する。

これを回避するには、上記のようなIDの記述は当該コントローラの一番下に記述すれば良い。

Router::connect('/admin/managers/create',             array('controller' => 'managers', 'action' => 'create'));
Router::connect('/admin/managers/:id',           array('controller' => 'managers', 'action' => 'view'), array('pass' => array('id')));

こうしておくと、createのほうが先に照合されるため、さっきのようなエラーは起きなくなる。
Routerは上から読んでいく、ということを覚えておくべし。

感想をお聞かせください。

  • ためになった・面白かった (1)
  • ためにならなかった・面白くなかった (2)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)