🪬

CakePHP書籍の「CakePHP 超入門」で詰まったところ

2019/04/09に公開
3

今回は学習に使った「CakePHP 超入門」で詰まったところを上げていこうかなと思います。

※2019/04/20 更新。

以前紹介していたラジオボタンの表示ですが、書籍の通りで表示できていたので訂正します。失礼しました。

つまずいたポイント

  • PHPのパスが違った
  • 「php.intl」の取得の仕方(p.33)
  • CsrfTokenエラーが発生する(p.76 リスト 2-9~11)
  • ラジオボタンがうまく表示されない(p.92 リスト 2-15)
  • ->toArray()でリストを取り出せない(p.161 リスト 3-10~11)
  • プラグインを追加してもマイグレーションできない(p.274 リスト 5-1)
  • bake allでエラーになる。MySQLのソケットが違う(p.282)
  • bake allで生成したBidinfoがBidinfosになってる(p.363、p364 リスト 6-10)

この書籍を進めていく中でいくつか詰まったところがあるので簡単にリスト化しました。

これらの解決方法をこれから詳しく解説していきます。

なお PC は Mac で、開発環境は MAMP で行いました。

PHPのパスが違った

書籍では XAMPP で進めているのですが、自分は MAMP でやりました。

そのせいだったのか微妙なところですが、うまく動いてくれませんでした。

結果的にはPHPのパスがMAMPではなく自分のMacになっていたということでした。

なのでコマンドでパスを設定しましょう。

詳しくは以下の記事を参考に設定してみてください。なお PHP のバージョンの違いに注意です。

https://manablog.org/mamp-path-sierra/

この後に出てくる「php.intl」の取得もそうなのですが、この 2 つの問題に気づいたのは最初の方ではなく後に出てくる「bake」のところでした。

どうやっても「bake」ができなかったので結局最初からやりなおしました。

これらの問題に気づき最初からやったところ、うまく進めることができたので最初に解決することをおすすめします。

「php.intl」の取得の仕方(p.33)

MacOS の場合のやり方を説明しているのですが、書籍の通りにやるとうまくいきません。

簡単に言うと、これはHomebrewでPHPをインストールするときの記述の仕方が前と変わってしまったためです。

原因としては、Homebrew が homebrew/php を廃止し、インストールした古い ini 設定ファイルがローカルにゴミとして残り続けていたことでエラーが出ていたそうです。

書籍だと「brew install homebrew/php/php71-intl」となっていますが、「brew install php@7.1」とすることで正しく処理されます。

以前インストールした php があれば、conf.d ディレクトリ内のファイルと Homebrew/php を untap(リポジトリ)を削除しましょう。

ここの問題は同じように悩まれている人が多くいたので助かりました。

参考になる記事です。

CsrfTokenエラーが発生する(p.76 リスト 2-9~11)

これはCakePHPのバージョンアップによってエラーが出るようになったそうです。

書籍の正誤表にもこのことは書いてあったのであまり詰まらなかったのですが、見逃してしまう人が多いと思ったのでリストに追加しました。

CakePHP 超入門 -補足情報-

Hosokuダウンロード

->toArray()でリストを取り出せない(p.161 リスト 3-10~11)

これは完全に書籍のミスです。

対象箇所のスクリーンショット

index.ctp と PeopleController.php の両方に toArray()が記述してあります。

エラーになるのでPeopleController.phpの「->toArray()」を削除しましょう。

プラグインを追加してもマイグレーションできない(p.274 リスト 5-1)

マイグレーションを使うには、そのためのプラグインを追加する必要があります。

この原因もバージョンアップによるものです。

公式ドキュメントを確認すると非推奨になっています。

バージョン3.7.0で撤廃:Plugin::load()とPlugin::loadAll()は非推奨です。

なので「bootstrap.php」には「Plugin::load('Migrations')」とは追加せず、ドキュメントの通り以下のように記述しましょう。

$this->addPlugin('Migrations');

※公式ドキュメントです>>https://book.cakephp.org/3.0/ja/plugins.html

bake allでエラーになる。MySQLのソケットが違う(p.282)

これは、php.iniのpdo_mysql.default_socketの値とMAMPのMySQLのsocketの位置が違ってたためにエラーとなっていました。

いくつかエラーが出てきて、調べていくとソケットに問題あることがわかったので、cake の設定ファイルに MAMP のソケットファイルを設定したら「bake all」ができました。

具体的には以下のようにシンボリックリンクを作成することで解決できました。

ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp/mysql.sock

これらは こちら の記事を元に解決できました。

あと参考に ln コマンドについての詳しい記事です。

>>https://eng-entrance.com/linux-command-ln

bake allで生成したBidinfoがBidinfosになってる(p.363、p364 リスト 6-10)

対象箇所のスクリーンショット

最後のミニオークションサイトを作るチャプターで、必要なファイルを「bake all」で生成するのですが Bidinfo の表記が Bidinfos と複数形になっています。

書籍ではそのことは注意書きで書いてあるのですが、他のファイルもよく確認するとBidinfosとなっている箇所がいくつかありました。

自分はここでエラーがでていてずっと悩んでいましたが、Bidinfosを探して、全て直したらエラーが出なくなりましたので他の箇所も確認してみてください。

まとめ

今回は自分が学習した中で詰まったところを書いてきましたが、多分これら以外にも環境などによっては問題が出てくるかと思います。

そして何よりのエラー問題が単語のスペルミスやタイポによるものです。

何もおかしくないのにと、問題箇所を探し回った結果自分のケアレスミスによるものだったり、ファイル名を間違えていただけだったので、みなさんミスにはご注意を。

CakePHP は設定よりも規約と言われるほどですので、ファイル名やクラス名のミスにも気をつけてください。

これからこの書籍を進めていく人や、CakePHP を勉強する人の参考になれば幸いです。

Discussion

Mikio KATAOKAMikio KATAOKA

始めまして、Kataokaと言います。
「CakePHP超入門」を最近読んで下記URLでまとめたのですが、
https://qiita.com/mikio_kataoka/items/2f10d633aaeabd5eb3d4
このWebページに勝手にリンクをさせていただいています。ごめんなさい。もしも、リンクして欲しくない等ありましたら、言っていただければ幸いです。訂正や削除をします。
また、このページについては、「CakePHP超入門」を読む時、とても助かりました。本当にありがとうございます。
私自身がWebサイトの公開に不慣れなので失礼がありましたら、申し訳ありません。

yukiyuki

kataoka さん、はじめまして。

リンクは全然問題ありません。
古い情報なので今では間違ってたりする可能性もありますが、参考になったのであれば良かったです。
こちらこそコメントしてくださってありがとうございます☺️