0
1

「CakePHP超入門」を読んで詰まったところ

Posted at

はじめに

2018年発行の「CakePHP超入門」を2024年8月に勉強しました。この時、最新バージョンに対応しておらず、何箇所か詰まりました。これは、その時のメモです。お役に立てれば良いと思います。
なお、CakePHP書籍の「CakePHP 超入門」で詰まったところを参考にしました。正直言って、こちらのページの方が役に立つと思います。

使用環境

  • MacBook Air(M1 2020)
  • macOS 14.6.1
  • MAMP Version 6.9
  • PHP 7.4.33
  • MySQL Version 5.7.39
  • CakePHP Version 3.10.5

準備

書籍ではXAMPPが使用されていますが、M1チップに未対応でした。このため、MAMPをインストールします。

MAMPは、www.mamp.infoからダウンロードしてインストールします。

なお、CakePHP3は、VersionMapによると

CakePHP Core branch PHP MIN PHP MAX
3.x EOL 3.x PHP 5.6 PHP 7.4

PHP 5.67.4 で動作します。このため、実行されているPHPのバージョンを7.4.33に設定します。

また、書籍の記述に合わせるため、Webサーバーのポート番号を80番、MySQLのポート番号を3306番に変更します。

詰まったところ

23ページ: PHPは動く?

MAMPをインストールした後、ターミナルアプリよりPHPコマンドを実行するためにPATHを設定します。
.zshrcを編集します。

.zshrc
#!/bin/zsh
# This is a path of PHP.
export PATH=$PATH:/Applications/MAMP/bin/php/php7.4.33/bin

30ページ: プロジェクトを用意しよう

書籍では、CakePHP3を使うため、下記コマンドで最新のCakePHPバージョン3系でプロジェクト作成します。

php composer.phar create-project --prefer-dist cakephp/app:"3.*" my_app_name`

32ページ: macOSはややこしい

php.iniは書き換え不要でした。
念の為、ターミナルappで下記を実行して、Command line Toolsをインストールします。

xcode-select --install

また、HomeBrewintautoconfはインストール不要でした。

77ページ: form.ctpを作成する

リスト2-11を実行するとCSRF token mismatchとエラーが出て実行できません。
<本書サポートサイト>
http://www.shuwasystem.co.jp/support/7980html/5409.html
上記からダウンロードできるhosoku.pdfに従って

hosoku.pdf
// use Cake\Event\Event; ←これを冒頭に追加すること
public function beforeFilter(Event $event)
{
    $this->getEventManager()->off($this->Csrf);
}

上記を試しましたが、うまくいきませんでした。私では解決策を見つけられませんでした。

cakePHP3.7.0でCSRF token mismatchというエラーが出てしまう(teratail.com)

CSRF を無効化するのではなく、$this->Form->create を使ってフォームを作成するようにしましょう。それが CakePHP における「規約」です。

上記の回答より、CSFRのエラーを放置して次に進んでも問題ないようです。

138ページ: CakePHPのデータベースの設定

書籍ではmycakeapp/config/app.phpを書き換えるようになっています。
しかし、CakePHP3.10では、
mycakeapp/config/app_local.phpを書き換えてデータベースの設定をします。
また、データベース接続の設定値は
http://localhost/MAMP/をWebブラウザで開き、MySQLの項目を確認します。ここで、usernamepasswordが確認できます。

161ページ: リストを取り出そう

161ページのリスト3-11を実行すると、

Call to a member function toArray() on array`

とエラーが出ます。改善方法は、

リスト3-11
<?php
namespace App\Controller;

use App\Controller\AppController;

class PeopleController extends AppController {

    public function index() {
        $data = $this->People->find('list')->toArray();
        $this->set('data', $data);
    }
}

->toArray()を削除します。

256ページ: テーブルの作成

messagesテーブルのmessageカラムのVARCHARの長さを65535に設定した場合、

#1074 - 列 'message' のサイズ定義が大きすぎます 
(最大 21845 まで)。代わりに BLOB または TEXT 
を使用してください。

とエラーメッセージがでます。改善するためには、VARCHARの長さを16383に設定します。

274ページ: マイグレーションプラグインを追加

CakePHP3.10では、Plugin::load()が非推奨なので使いません。このため、
https://book.cakephp.org/3/ja/plugins.html より
src/Application.phpファイルの// Load more plugins hereコメントの下に

$this->addPlugin('Migrations');

を追加します。

class Application extends BaseApplication {
    public function bootstrap()
    {
        ...
        // Load more plugins here
        $this->addPlugin('Migrations');
    }
}

282ページ: bakeでCRUDを作成する。

MAMPでサーバ群を起動(MAMPアプリを起動後、startボタンを押す)します。
ターミナルアプリで、mycakeappディレクトリに行き、以下を実行します。

./bin/cake bake all movies

345ページ: Users 作成

% ./bin/cake bake migration CreateUsers username:string[100] password:string[100] role:string[20]

上記をターミナルで実行すると

zsh: no matches found: username:string[100]

とエラーが出て作成できませんでした。ここで、

% ./bin/cake bake migration CreateUsers 'username:string[100]' 'password:string[100]' 'role:string[20]'

データベースのテーブルのカラム設定項目を' 'で囲むとうまく行きます。
なお、もっと良い方法があるかもしれません。

345ページ: Biditems 作成

データベースのテーブルのカラムname:string[100]' 'で囲むとうまく行きます。

% ./bin/cake bake migration CreateBiditems user_id:integer 'name:string[100]' finished:boolean endtime:datetime created

348ページ: マイグレーションを実行する

./bin/cake migrations migrate

上記コマンドは、MAMPを起動(startボタンを押して)してから実行するとうまくいきました。MAMPを起動してないと下記エラーが出ます。

Exception: There was a problem connecting to the database: SQLSTATE[HY000] [2002] No such file or directory in [/Applications/MAMP/htdocs/mycakeapp/vendor/robmorgan/phinx/src/Phinx/Db/Adapter/PdoAdapter.php, line 82]
...

349〜351ページ: bakeでCRUDを作成しよう

エラーを防ぐために、この節のコマンドは全て、MAMPを起動(startボタンを押して)してから実行します。

366ページ: config/app.phpの修正

書籍では、config/app.phpを変更していますが、CakePHP 3.10では、config/app_local.phpを修正します。

config/app_local.php
'security' => [
    'salt' => env('SEURITY_SALT', 'a3a4bac...ランダムなテキスト...'),
],

'salt' => env('SEURITY_SALT'), の行を
'salt' => env('SEURITY_SALT', 'a3a4bac...ランダムなテキスト...'),
に変更します。

374ページ: ログインしてみよう!

ログインする前に、ブラウザのキャッシュやクッキーを削除した方がよいです。
削除しないと、うまく動作しないことがあります。
Safariの場合、
Safari->履歴を消去->「全ての履歴」を選択して、「履歴を消去」ボタンをおすと良いと思います。
(Cookieなどの履歴が消えますので注意してください。)

377ページ: コントローラーを修正しよう

BidmessagesContoller.php ファイルの中に、'Bidinfos''bidinfos'があります。
これらを'Bidinfo''bidinfo'に書き換えます。

終わりに

今回書籍を読むにあたって、CakePHP書籍の「CakePHP 超入門」で詰まったところがとても参考になりました。Webページ作成者様、ありがとうございます。
そして、「CakePHP超入門」の著者: 掌田 津耶乃様、ありがとうございます。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1