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

2020年8月24日システムCakePHP,composer,Nginx,PHP

CakePHP4.xをComposerでインストールしてNginxを設定する
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
intlとは

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"となります)

CakePHP4の初期画面
CakePHP4の初期画面

もし真っ白画面や動かない場合は、以下のログファイルなどを確認して状況を把握しましょう!

  • Nginx
    • /var/log/nginx/cake.access.log
      • ブラウザで表示確認した時に、アクセスログに書き込まれているか確認。
      • エラー内容(HTTP Statusが4XXなど)の記述がされていないか確認。
    • /var/log/nginx/cake.error.log
      • 何かエラーとなっている内容が書き込まれていないか確認。

そしてエラーメッセージが書き込まれていたらググって調べて対応していきましょう!

データベース設定

Webサービスを作るとなるとデータベースは必要不可欠です。今回はデータベースの設定を行わないので以下の様なメッセージが表示されます。

CakePHP4の初期画面
CakePHP4の初期画面
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とは

PSRは、PHPでのファイルの読み込み・クラスのオートロードを行う仕様。詳しくは「PSR-4 の理解」にて解説されていました。

CakePHPのインストール時に起こるエラー

Fatal error: You must enable the intl extention to use CakePHP. in ~config/requirements.php on line 31

intlがインストールされていない。

プログラミングスクール受講メリット

・メンターにすぐ聞けるので分からないところでつまづかない
・受講生同士で学び合いモチベーション維持しやすい
・就学後に就職支援や進路サポートを受けることが出来る

ユート
ユート

Webプログラマ兼ブロガー | プログラミング基礎知識を発信|Webプログラマ歴は10年以上|JavaScript,PHP.HTML | 「人生の時間は有限。悪いことをしている時間はない」
プロフィール

2020年8月24日システムCakePHP,composer,Nginx,PHP

Posted by ユート