CakePHP5 もリリースされましたが下書きのまま放置しておりました。ちゃんと書こうとすると億劫になってしまいますね。もっと気楽に自分のメモ程度に書くのが良いのかも。
2024年6月5日より、sv16000台になって、SQLite3 のバージョンが3.7.xに上がりました。それによってDebugKit用にDBを設定する必要はなくなりました。
準備
Xserverで利用するため準備・確認をします。
- PHP8.1以上にします。Xserverはドメイン単位でPHPバージョンを切り替えられますので、サーバーパネルで変更します。
- PHP(CLI) を合わせます。SSH で入ったシェルで、php -v として8.1になるようにします。通常、そうなっていません。
- composer2 を~/bin/composer において、Xserver標準の composer (v1) の代わりに使います。
- サーバーパネルで適当なDBを用意します。
- 公開できるドメイン名があるものとします。(今回は、dev.example.com)その下にプロジェクトを作成します。
Composer
インストールにcomposerを使いますが、Xserver標準のcomposer は古いので独自に準備します。
[testsv@sv14xxx ~]$ composer -V
Composer version 1.10.27 2023-09-29 10:50:23
公式サイトに従い、スクリプトを流します。
https://getcomposer.org/
https://getcomposer.org/download/
[user@sv14xxx ~]php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('sha384', 'composer-setup.php') === 'e21205b207c3ff031906575712edab6f13eb0b361f2085f1f1237b7126d785e826a450292b6cfd1d64d92e6563bbde02') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" php composer-setup.php php -r "unlink('composer-setup.php');"
~/bin/ 以下に移動します。パスが通ってなかったら通します。
composer のバージョンが2になっていることを確認します。(下記はちょっと古いかも)
[user@sv14xxx ~]$mkdir bin [user@sv14xxx ~]mv composer.phar ./bin/composer [user@sv14xxx ~]cat .bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs # PATH=$PATH:$HOME/bin PATH=$HOME/bin:$PATH export PATH [user@sv14xxx ~]source .bash_profile [testsv@sv14xxx ~]$ composer -V Composer version 2.2.22 2023-09-29 10:53:45
コマンドライン版PHPのバージョンを8.1以上に変えておきます。Xserverの管理パネルでPHPのバージョンが指定できますが、CLI PHPのバージョンを合わせておきます。以下では、8.1を選択しています。
[testsv@sv14xxx ~]$ php -v .... [testsv@sv14xxx ~]$ ls /usr/bin/php* /usr/bin/php /usr/bin/php-fcgi8.2 /usr/bin/php7.2-cgi /usr/bin/php-cgi /usr/bin/php5.1 /usr/bin/php7.3 /usr/bin/php-fcgi5.1 /usr/bin/php5.3 /usr/bin/php7.3-cgi /usr/bin/php-fcgi5.3 /usr/bin/php5.4 /usr/bin/php7.4 /usr/bin/php-fcgi5.4 /usr/bin/php5.5 /usr/bin/php7.4-cgi /usr/bin/php-fcgi5.5 /usr/bin/php5.6 /usr/bin/php8.0 /usr/bin/php-fcgi5.6 /usr/bin/php5.6-cgi /usr/bin/php8.0-cgi /usr/bin/php-fcgi7.0 /usr/bin/php54 /usr/bin/php8.1 /usr/bin/php-fcgi7.1 /usr/bin/php54-cgi /usr/bin/php8.1-cgi /usr/bin/php-fcgi7.2 /usr/bin/php7.0 /usr/bin/php8.2 /usr/bin/php-fcgi7.3 /usr/bin/php7.0-cgi /usr/bin/php8.2-cgi /usr/bin/php-fcgi7.4 /usr/bin/php7.1 /usr/bin/phpize /usr/bin/php-fcgi8.0 /usr/bin/php7.1-cgi /usr/bin/php-fcgi8.1 /usr/bin/php7.2 [testsv@sv14xxx ~]$ ln -s /usr/bin/php8.1 ./bin/php [testsv@sv14xxx ~]$ php -v PHP 8.1.22 (cli) (built: Aug 15 2023 11:02:44) (NTS) Copyright (c) The PHP Group Zend Engine v4.1.22, Copyright (c) Zend Technologies
新規プロジェクト作成
Xserverで作成されているドメイン名のフォルダに移動し、新規CakePHP5プロジェクトを作成します。
今回はサブドメイン dev.example.com で公開するので、Xserverで自動作成される example.com/pubic_html/dev フォルダを、app_dev/public に向けます。
[user@sv14xxx ~]$cd example.com [user@sv14xxx example.com]$composer create-project --prefer-dist cakephp/app:~5.0 app_dev ..... Set Folder Permissions ? (Default to Y) [Y,n]? y Permissions set on /home/testsv/example.com/app_dev/tmp/cache Permissions set on /home/testsv/example.com/app_dev/tmp/cache/models Permissions set on /home/testsv/example.com/app_dev/tmp/cache/persistent Permissions set on /home/testsv/example.com/app_dev/tmp/cache/views Permissions set on /home/testsv/example.com/app_dev/tmp/sessions Permissions set on /home/testsv/example.com/app_dev/tmp/tests Permissions set on /home/testsv/example.com/app_dev/tmp Permissions set on /home/testsv/example.com/app_dev/logs Updated Security.salt value in config/app_local.php (Security.salt は自動的に乱数が設定される。) (dev.example.comで運用) cd public_html #念のためバックアップ mv dev dev_bak ln -s ../app_dev/webroot dev #xserverが参照する php.ini のようなもの。ドメインのキャッシュ設定のヘルプも参照 cp dev_bak/.user.ini ../app_dev/webroot
もし、composer のエラーが出たら、github のパーソナルアクセストークンを設定します。
composer config --global github-oauth.github.com (githubアクセストークン)
ブラウザからアクセスして確認します。(dev.example.com)まだデータベースなど初期設定が終わっていないところが赤いアイコンで表されています。
CakePHP5 初期設定
.env を有効化し、.env から設定情報を挿入できる様にします。ただし、.envを使わず、app_local.php のみを使うのがデフォルトです。
/config/.env_sample を .env にコピーし編集します。
[testsv@sv14xxx]$ cd ~/example.com/app_dev/config [testsv@sv14xxx config]$mv .env.example .env [testsv@sv14xxx config]$vi .env export APP_NAME="sample" export DEBUG="true" export APP_ENCODING="UTF-8" export APP_DEFAULT_LOCALE="ja_JP" export APP_DEFAULT_TIMEZONE="Asia/Tokyo" #export SECURITY_SALT="__SALT__" # SECURITY_SALT コメントアウト app_local.php に設定済み
bootstrap.php で .env 有効化します。以下の部分はコメントアウトされているので、アンコメントします。
if (!env('APP_NAME') && file_exists(CONFIG . '.env')) { $dotenv = new \josegonzalez\Dotenv\Loader([CONFIG . '.env']); $dotenv->parse() ->putenv() ->toEnv() ->toServer(); }
ちなみにコードにあるとおり、APP_NAMEを設定し、かつ、.envファイルがあるときに、.env が有効になります。
データベース設定
app.local のtimezoneを変更します。(後のapp_local.php はapp.localを上書きします。)
'default' => [ 'className' => Connection::class, 'driver' => Mysql::class, 'persistent' => false, 'timezone' => '+9:00'
.env の「APP_DEFAULT_TIMEZONE」はDBでは使われません。
また、Xserver では、”Asia/Tokyo” は使えません。以下が検証コードです。
[testsv@sv14xxx]$ mysql -u xxxxx -p MariaDB [(none)]> SET @@SESSION.time_zone = "Asia/Tokyo"; ERROR 1298 (HY000): Unknown or incorrect time zone: 'Asia/Tokyo' MariaDB [(none)]>
app_loca.php に、データベース情報を設定します。
'username' => 'testsv_admin', 'password' => 'd8#iessiodf', 'database' => 'example_dev',
初期ページでさきほど赤くなっていたdatabase の部分がグリーンになります。
DebugKit 有効化
config/plugins.php に既に追記されています。bootstrap.php で強制的に有効化します。
if (Configure::read('debug')) { Configure::write('Cache._cake_model_.duration', '+2 minutes'); Configure::write('Cache._cake_core_.duration', '+2 minutes'); // disable router cache during development Configure::write('Cache._cake_routes_.duration', '+2 seconds'); Configure::write('DebugKit.forceEnable', true); }
DebugKit用のデータベース情報をapp_local.php に記載します。もちろんこの前にXserverでDBを作成しておきます。
/** * The debug_kit connection stores DebugKit meta-data. */ 'debug_kit' => [ 'className' => 'Cake\Database\Connection', 'driver' => 'Cake\Database\Driver\Mysql', 'persistent' => false, 'host' => 'localhost', //'port' => 'nonstandard_port_number', 'username' => 'dbusername', // Your DB username here 'password' => 'dbpassword', // Your DB password here 'database' => 'debug_kit', // 'encoding' => 'utf8', // 'timezone' => 'UTC', 'cacheMetadata' => true, 'quoteIdentifiers' => false, //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'], ],
確認
個人的にはLaravel のデバッグバーより好みです。
以下書きかけ
各種 scafold
[testsv@sv14xxx app_dev]$bin/cake bake model Users [testsv@sv14xxx app_dev]$bin/cake bake controller Users [testsv@sv14xxx app_dev]$bin/cake bake template Users
dev.example.com/users
各種プラグインをインストール
[testsv@sv14xxx app_dev]$ vi src/View/AppView.php [testsv@sv14xxx app_dev]$ bin/cake bootstrap copy_layouts [testsv@sv14xxx app_dev]$ bin/cake bake template Users login -t BootstrapUI Creating file /home/testsv/example.com/app_dev/templates/Users/login.php Wrote `/home/testsv/example.com/app_dev/templates/Users/login.php`