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

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

ルーティングを弄っていると、正しい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)
  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。

コメントを残す

*

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