7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

私が大嫌いなCakePHPを好きになるまで 第1章 〜環境構築編〜

Last updated at Posted at 2021-09-09

はじめに

私は元々Laravelをメインで学習していたのですが、転職した先の案件でCakePHPを使うことに。
しかし、触れば触るほど「Laravelでいいやん」感が強く、日に日に拒絶反応が、、、。

いつか好きになり、「CakePHP完全に理解した」という状態になるまで備忘録をメモします。

第1章: 最初の難関「環境構築」

開発環境は以下になります。

PHP 7.3 / MySQL5.6 / CakePHP3

サクッとMAMPを使って実装していきます。

作業

この辺は公式マニュアルに従順に従います。

$ cd /Applications/MAMP/htdocs
$ composer self-update && composer create-project --prefer-dist cakephp/app:^3.8 cake_env
$ cd cake_env

一旦動作確認

おそらくインストールできたので、一旦MAMP起動して動作確認。
CakePHP含めFWにはウェブサーバーを起動するコマンドがありますが、MAMPを使っているのでシンプルに
MAMPを立ち上げてhttp://localhost:8888/cake_envで動作確認できました。

Databaseの接続

まぁLaravelでもそうだけどCakeもapp.phpにデータベースの設定したらいいんだな。

'Datasources' => [
        'default' => [
            ...省略...
            'username' => 'cakeenv',
            'password' => 'cakeenv',
            'database' => 'cake_env',
            ...省略...

さて、ウェルカムページを見てみると、、、???
うまくいってない??へ?

いつの間にDBの設定はapp_local.phpになったん。

まさかのDBの設定はapp.phpじゃなくapp_local.phpに設定するようになっていました。
いつの間に変えた?というか同じ3系の中でそういう修正されるんかい、、、
てことでconfig/app_local.phpに記述したら無事登録されました。

bakeコマンドの確認

あとは初期設定の確認ってことでbakeコマンドも通るか確認

$ bin/cake bake

とりあえず問題なく通った。

bake allでサクッと準備しよう

テーブル構成として、usersとそれらの権限を管理するrolesというテーブルを用意していきます。
なのでrolesから導入。
※CakePHPでbake model Userなど作る前には、データベースにテーブルができていないといけません。今回は、適当にSQLファイルを書いて、MAMPに直接インポートさせたという前提で進めます。

bin/cake bake all roles

はい来たエラーです

Exception: SQLSTATE[HY000] [2002] No such file or directory in [/Applications/MAMP/htdocs/cake_env/vendor/cakephp/cakephp/src/Database/Driver.php, line 93]
2021-09-09 07:35:18 Error: [PDOException] SQLSTATE[HY000] [2002] No such file or directory in /Applications/MAMP/htdocs/cake_env/vendor/cakephp/cakephp/src/Database/Driver.php on line 93
Stack Trace:
# 0 /Applications/MAMP/htdocs/cake_env/vendor/cakephp/cakephp/src/Database/Driver.php(93): PDO->__construct('mysql:host=loca...', 'autumncake', 'autumncake', Array)
# 1 /Applications/MAMP/htdocs/cake_env/vendor/cakephp/cakephp/src/Database/Driver/Mysql.php(105): Cake\Database\Driver->_connect('mysql:host=loca...', Array)
# 2 /Applications/MAMP/htdocs/cake_env/vendor/cakephp/cakephp/src/Database/Schema/BaseSchema.php(44): Cake\Database\Driver\Mysql->connect()
# 3 /Applications/MAMP/htdocs/cake_env/vendor/cakephp/cakephp/src/Database/Dialect/MysqlDialectTrait.php(62): Cake\Database\Schema\BaseSchema->__construct(Object(Cake\Database\Driver\Mysql))
# 4 /Applications/MAMP/htdocs/cake_env/vendor/cakephp/cakephp/src/Database/Schema/Collection.php(51): Cake\Database\Driver\Mysql->schemaDialect()
# 5 /Applications/MAMP/htdocs/cake_env/vendor/cakephp/cakephp/src/Database/Schema/CachedCollection.php(41): Cake\Database\Schema\Collection->__construct(Object(Cake\Database\Connection))
# 6 /Applications/MAMP/htdocs/cake_env/vendor/cakephp/cakephp/src/Database/Connection.php(399): Cake\Database\Schema\CachedCollection->__construct(Object(Cake\Database\Connection), true)
# 7 /Applications/MAMP/htdocs/cake_env/vendor/cakephp/bake/src/Shell/Task/ModelTask.php(1096): Cake\Database\Connection->getSchemaCollection()
# 8 /Applications/MAMP/htdocs/cake_env/vendor/cakephp/bake/src/Shell/Task/ModelTask.php(1050): Bake\Shell\Task\ModelTask->_getAllTables()
# 9 /Applications/MAMP/htdocs/cake_env/vendor/cakephp/bake/src/Shell/Task/ModelTask.php(213): Bake\Shell\Task\ModelTask->listAll()
# 10 /Applications/MAMP/htdocs/cake_env/vendor/cakephp/bake/src/Shell/Task/ModelTask.php(131): Bake\Shell\Task\ModelTask->getAssociations(Object(Cake\ORM\Table))
# 11 /Applications/MAMP/htdocs/cake_env/vendor/cakephp/bake/src/Shell/Task/ModelTask.php(114): Bake\Shell\Task\ModelTask->getTableContext(Object(Cake\ORM\Table), 'roles', 'Roles')
# 12 /Applications/MAMP/htdocs/cake_env/vendor/cakephp/bake/src/Shell/Task/ModelTask.php(101): Bake\Shell\Task\ModelTask->bake('Roles')
# 13 /Applications/MAMP/htdocs/cake_env/vendor/cakephp/bake/src/Shell/BakeShell.php(282): Bake\Shell\Task\ModelTask->main('Roles')
# 14 /Applications/MAMP/htdocs/cake_env/vendor/cakephp/cakephp/src/Collection/CollectionTrait.php(64): Bake\Shell\BakeShell->Bake\Shell\{closure}('Roles', 0)
# 15 /Applications/MAMP/htdocs/cake_env/vendor/cakephp/bake/src/Shell/BakeShell.php(283): Cake\Collection\Collection->each(Object(Closure))
# 16 /Applications/MAMP/htdocs/cake_env/vendor/cakephp/cakephp/src/Console/Shell.php(517): Bake\Shell\BakeShell->all('roles')
# 17 /Applications/MAMP/htdocs/cake_env/vendor/cakephp/cakephp/src/Console/CommandRunner.php(384): Cake\Console\Shell->runCommand(Array, true)
# 18 /Applications/MAMP/htdocs/cake_env/vendor/cakephp/cakephp/src/Console/CommandRunner.php(162): Cake\Console\CommandRunner->runShell(Object(Bake\Shell\BakeShell), Array)
# 19 /Applications/MAMP/htdocs/cake_env/bin/cake.php(12): Cake\Console\CommandRunner->run(Array)
# 20 {main}

前こんなのあったっけ、、、と調べると答えらしきものが。
結論として、MAMP上のMySQLのソケットの場所が違うらしい。
参考記事で見つけたので詳しくはこちら参照してください。

さて、やっていきます。実行するディレクトリに気をつけてください。

$ ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp/mysql.sock
再度bake
bin/cake bake all roles

できた!!!

うーん。嫌いだな。
Laravelでいいじゃん。

次はMigrationとかSeeder周りをやってみます。

7
0
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
7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?