Controllerの$nameの指定でエラー

結局やる気なくして勉強をさぼっていたのだけど、なんだかまたやる気になってきて勉強を再開しました。前から勉強に使っていた本の続きからやる。


Chapter3「データベースとモデル」から再開。基本的に仕事でMySQLは専門的にやっているので割と楽にいけるはずと踏んでいた。作りたい物をある程度決まっていたので、データベース名やコントローラ名など実際にものに合わせて実験しつつな感じで作り始めてみた。しかし大はまり。

Error: The view for BoardsController::index() was not found.
Error: Confirm you have created the file: /var/www/html/cakephp/app/View/Board/index.ctp
Notice: If you want to customize this error message, create app/View/Errors/missing_view.ctp

こんなエラーがでて表示されない。1番下のエラーはまぁエラーが出ている時用のテンプレートがないというくらいなので問題ない。しかし、上2つは完全なるエラーです。index.ctpってビューファイルがないから/var/www/cakephp/app/View/Board/にindex.ctpってファイルを作りなさいってことだと思います。
でも、index.ctpも本に沿ってちゃんと作ったんだけどなぁ。どっか打ち間違いでもないのかと何度も本とコードを見比べる。まちがってない。
そしてエラーを見ていて気づいた。/var/www/html/cakephp/app/View/Boardなんてディレクトリない。本に沿うと/var/www/html/cakephp/app/View/Boardsと複数形でディレクトリを作成した。つまりビューを見るディレクトリの指定がどこかでおかしくなっているのだと思った。とはいえコードは本と違っていない。モデルやコントローラのファイル名まで全部確認した。試しに複数形のディレクトリを単数にしたらエラーはなくなった。
ここでちゃんとcakephpの仕組みや命名ルールなどが分かっていればすぐに分かるんだろうなと思いながら、しょうがないのでネットで検索しつついろいろ試す。使っているメソッドや規則的な部分でマニュアルを確認。そうしたらようやくわかった。本の誤植でした。
113ページ、115ページ、119ページのBorardsController.phpの部分。

class BoardsController extends AppController {
    public $name = 'Board';

↓こちらが正解

class BoardsController extends AppController {
    public $name = 'Boards';

$nameは普通コントローラ名を指定するらしいです。だからBoardsControllerとしているのでBoards。数時間迷ったー。


本の誤植とはやられました。cakephpが初心者でもいいけど調べる力が問われますね。ちょうど勉強にしていたこの本が初版だったので、2版以降なら訂正されているのかもしれません。今後のちゃんとやったとしても誤植の危険があるとなると厳しいです。そしてもうbeforeFindでまたうまくいかなくてはまっているのだけど、誤植かもしれないと思うとこわい。一応本はcakephp2.1で、実際に使っているのはcakephp2.2でその辺の違いも少しずつでてくるのかもしれない。