CakePHP4.xをComposerでインストールしてNginxを設定する

CakePHP4.xをComposerでインストールする解説をします。
composerとPECLやPEARについて詳しく紹介した記事も「Composerって何?!PHPのライブラリをインストールするのにPEARやPECLは古い?」を是非ご覧ください。
CakePHP(PHPフレームワーク)の環境を構築
Composerを使ってCakePHP 4.xの公式サイト「CakePHP Installation – 4.x」を参考に環境構築を進めていきます。
Composerがインストールされている前提で進めます。またCakePHP4.xで推奨されているPHPのバージョン7.2以上などについては詳しく触れていません。
→composerについては「Composerって何?!PHPのライブラリをインストールするのにPEARやPECLは古い?」を参照ください。
intlをインストール
CakePHPでは、intlが入っていないと以下の様なエラーが出力され動作しません。なのでintlをインストールします。
Fatal error: You must enable the intl extention to use CakePHP. in ~config/requirements.php on line 31
PHPのプログラミングで、ロケール関連のさまざまな操作を行うための国際化用拡張モジュール。
intlがインストールされているか確認します。
$ php -i | grep intl
intlがインストールされていない場合は、インストールする必要があります。なので、まずyumで管理されているintlのパッケージを確認します。
$ yum list | grep intl
intltool.noarch 0.50.2-7.amzn2 amzn2-core
perl-libintl.x86_64 1.20-12.amzn2.0.2 amzn2-core
php-intl.x86_64 7.3.19-1.amzn2 amzn2extra-php7.3
intlをyumでインストールします。
$ sudo yum install php-intl.x86_64
phpとnginxを再起動します。
$ sudo systemctl restart php-fpm.service
$ sudo systemctl restart nginx.service
CakePHPプロジェクトを作成
CakePHPプロジェクトを用意するディレクトリを作成します。
(自分は/var/www/cakephpへ作成するようにしました。)
$ cd /var/www
$ sudo mkdir cakephp
# パーミッションを環境に合わせて設定
$ sudo chown nginx:user cakephp
$ sudo chmod -R 775 cakephp
$ ls -la /var/www
合計 4
drwxr-xr-x 5 nginx user 46 7月 24 17:25 .
drwxr-xr-x 20 root root 280 9月 29 2019 ..
drwxrwxr-x 2 nginx user 6 7月 24 17:25 cakephp
Composerのcreate-projectコマンドを使ってCakePHPプロジェクトを作成します。
(ここではmy_app_nameという名前のCakePHPプロジェクトとします。)
$ composer create-project --prefer-dist cakephp/app:~4.0 my_app_name
Creating a "cakephp/app:~4.0" project at "./my_app_name"
Installing cakephp/app (4.1.1)
- Installing cakephp/app (4.1.1): Loading from cache
Created project in /var/www/cakephp/my_app_name
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 85 installs, 0 updates, 0 removals
- Installing cakephp/plugin-installer (1.2.0): Downloading (100%)
- Installing psr/simple-cache (1.0.1): Downloading (100%)
(省略)
Generating autoload files
> Cake\Composer\Installer\PluginInstaller::postAutoloadDump
30 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
> App\Console\Installer::postInstall
Created `config/app_local.php` file
Created `/var/www/cakephp/my_app_name/logs` directory
Created `/var/www/cakephp/my_app_name/tmp/cache/views` directory
Set Folder Permissions ? (Default to Y) [Y,n]? Y
Permissions set on /var/www/cakephp/my_app_name/tmp/cache
Permissions set on /var/www/cakephp/my_app_name/tmp/cache/models
(省略)
Updated Security.salt value in config/app_local.php
一応CakePHPプロジェクトが出来たか確認します。
$ ls -la /var/www/cakephp
合計 0
drwxrwxr-x 3 nginx user 25 7月 24 17:29 .
drwxr-xr-x 5 nginx user 46 7月 24 17:25 ..
drwxrwxr-x 12 user user 318 7月 24 17:29 my_app_name
Nginxを設定
先ほど作成したCakePHPプロジェクトをドキュメントルートとなるようNginxへ設定します。
(ここではserver_nameをlocalhostとしておきます)
Nginxの設定変更するためのファイルは環境によりますが、/etc/nginx/conf.d/***.confです。
server {
listen 80;
server_name localhost;
root /var/www/cakephp/my_app_name/webroot;
index index.php;
access_log /var/log/nginx/cake.access.log;
error_log /var/log/nginx/cake.error.log;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_intercept_errors on;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
初期動作確認
CakePHPプロジェクトの作成とNginxの設定が済んだので、動作確認を行います。
動作確認の方法は、ブラウザで表示確認を行います。以下の様な画面が表示されればOKです!
(今回はNginxのserver_nameをlocalhostとしているので、表示確認は"http://localhost"となります)

もし真っ白画面や動かない場合は、以下のログファイルなどを確認して状況を把握しましょう!
- Nginx
- /var/log/nginx/cake.access.log
- ブラウザで表示確認した時に、アクセスログに書き込まれているか確認。
- エラー内容(HTTP Statusが4XXなど)の記述がされていないか確認。
- /var/log/nginx/cake.error.log
- 何かエラーとなっている内容が書き込まれていないか確認。
- /var/log/nginx/cake.access.log
そしてエラーメッセージが書き込まれていたらググって調べて対応していきましょう!
Webサービスを作るとなるとデータベースは必要不可欠です。今回はデータベースの設定を行わないので以下の様なメッセージが表示されます。

CakePHP is NOT able to connect to the database.
Connection to Mysql could not be established: SQLSTATE[HY000] [2002] No such file or directory
データベースの設定は、"/var/www/cakephp/my_app_name/config/app_local.php"で行います。詳しくは「CakePHP4でブログサイト作るチュートリアル」にサンプルがありました。
CakePHPを触ってみよう
ここまで来たらCakePHPの動作を確認出来たと思います。次にCakePHPを軽く触ってみましょう!
Controllerを触ってみよう
まず新しく自分でコントローラを用意してみます。今回はIndexController.phpを作成してみます。
(今回の環境だと/var/www/cakephp/my_app_name/src/Controller/IndexController.phpです)
<?php
namespace App\Controller;
use App\Controller\AppController;
use Cake\Core\Configure;
use Cake\Network\Exception\NotFoundException;
use Cake\ORM\TableRegistry;
use Cake\Filesystem\Folder;
use Cake\Filesystem\File;
use Cake\Event\EventInterface;
use Cake\Core\Exception\Exception;
use Cake\Log\Log;
class IndexController extends AppController {
public function beforeFilter(EventInterface $event) {
parent::beforeFilter($event);
}
public function index() {
}
}
Templateを触ってみよう
次に画面表示する為にテンプレートを自分で用意します。今回はIndexControllerに対応させるために/templates/Index/index.phpで作成します。
(今回の環境だと/var/www/cakephp/my_app_name/templates/Index/index.phpです)
<p>Indexページ</p>
ルーティング設定を触ってみよう
最後にブラウザでhttp://localhostにアクセスするとIndexController.phpが表示されるようにroutes.phpを変更してルーティング設定を行います。
(今回だとroutes.phpは、/var/www/cakephp/my_app_name/config/routes.phpです)
$builder->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']);
を以下の様にIndexController.phpへアクセスするように変更します。
$builder->connect('/', ['controller' => 'Index', 'action' => 'index']);
表示確認しよう
ブラウザでhttp://localhostにアクセスします。すると以下の様な画面が表示されます。

Layoutを触ってみよう
Layoutファイルを編集します。
(今回だと/var/www/cakephp/my_app_name/templates/layout/default.phpです)
<a href="<?php echo $this->Url->build('/') ?>"><span>Cake</span>PHP</a>
をちょこっと変更します。
<a href="<?php echo $this->Url->build('/') ?>">My<span>Cake</span>PHP</a>
もう一度表示確認しよう
ブラウザでhttp://localhostにアクセスします。するとLayoutが少し変更された画面が表示されます。

CakePHPの予備知識
CakePHP4からテンプレートファイルがtemplateへ移動された理由
CakePHP2までは、「/app/Views」にテンプレートがありました。が、CakePHP3からは「/app/src/View」へ変わりました。
CakePHP4ではさらに「/app/templates」へ移動されました。
移動された理由は、CakePHPの公式サイトの「4.0 移行ガイド」で説明されています。
テンプレートは、 app や plugin ルート上の src/Template/ から templates/ フォルダーへ移動されました。 この変更により、 src フォルダーには、 composer のオートローダーを介して オートロードされるクラスを持つファイルのみが含まれるようになりました。
https://book.cakephp.org/4/ja/appendices/4-0-migration-guide.html#id8
これは、PSRの仕様に準拠しているための変更です。
PSRは、PHPでのファイルの読み込み・クラスのオートロードを行う仕様。詳しくは「PSR-4 の理解」にて解説されていました。
CakePHPのインストール時に起こるエラー
Fatal error: You must enable the intl extention to use CakePHP. in ~config/requirements.php on line 31
intlがインストールされていない。
ディスカッション
コメント一覧
まだ、コメントがありません