CakePHP 新規プロジェクトの作成

公開日:2018-05-17

1. 概要

CakePHPの本家のサイトに従って、新規プロジェクトを作成してみます。


2. 新規プロジェクトの作成

CakePHP のプロジェクトの作成には、Composer を使用します。
前回作成した cmd_for_php.bat でコマンドプロンプトを起動して、以下のコマンドを実行します。
Xampp(apache)を起動しておく必要はありません。

コマンドプロンプト
cd C:\pleiades\xampp\htdocs
composer create-project --prefer-dist cakephp/app my_app
実行すると、以下のエラーが出ました。

エラー
C:\pleiades\xampp\htdocs>php C:\pleiades\xampp\php7\composer.phar create-project --prefer-dist cakephp/app my_app
Installing cakephp/app (3.6.1)
  - Installing cakephp/app (3.6.1): Loading from cache
Created project in my_app
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - cakephp/cakephp 3.6.4 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.6.3 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.6.2 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.6.1 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.6.0 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - Installation request for cakephp/cakephp 3.6.* -> satisfiable by cakephp/cakephp[3.6.0, 3.6.1, 3.6.2, 3.6.3, 3.6.4].

  To enable extensions, verify that they are enabled in your .ini files:
    - C:\pleiades\xampp\php7\php.ini
  You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.
エラーには、intl が欠落していると書いてあります。
これは本家のサイトの最初に書いてありますが、php.ini で extension=php_intl.dll を有効にする必要があるようです。
php.ini を開き、以下の2つの先頭の「;」を削除して有効にしました。

php.ini
extension=intl
extension=mbstring
htdocs に my_app が作成されているため、削除してからもう1度実行します。
コマンドプロンプト
composer create-project --prefer-dist cakephp/app my_app
最後に「Set Folder Permissions ? (Default to Y) [Y, n]?」と聞かれるので「Y」を押します。

これで新規プロジェクトの作成は完了です。

xampp(apache)を起動して、
http://localhost/my_app/ にアクセスします。

エラー
Fatal error: You must enable the intl extension to use CakePHP. in C:\pleiades\xampp\htdocs\my_app\config\requirements.php on line 31
まだ intl が有効になっていないようです。
http://localhost/dashboard/phpinfo.php にアクセスしたところ、
intl だけでなく、mbstring も有効になっていません。

但し、先ほど CakePHP の新規プロジェクトは作成できたため、php.ini は問題ないはずです。
コマンドプロンプトで phpinfo を表示してみます。

コマンドプロンプト
php -i > phpinfo.txt
出力されたファイルを見ると、こちらには mbstring が含まれています。
どうやら、実行環境によって、うまく反映されていないようです。
パスがずれている可能性があるため、php.ini を確認したところ、extension_dir = "ext" となっていました。
php.exe で実行した場合には、extフォルダを相対パスで見ることができますが、
1つ上の階層の xampp_start.exe で起動した場合には、パスがずれて参照できないのかもしれません。
今回は php7 にバージョンを上げているため、最初の Xampp に入っていた php.ini を確認してみます。
php.ini
extension_dir = "\pleiades\xampp\php\ext"
ドライブのルートからパスになっています。
他にも同様の問題がありそうなため、php7 の php.ini を「pleiades」で検索して、
見つかった場合には、最初の php.ini と同様の値にします。
また、今回は php7 に変更しているため、php の部分は php7 にします。

php.ini
;include_path = \pleiades\xampp\php7\PEAR
パスを変更しましたが、PEAR がないため、無効にしています。


php.ini
extension_dir = "\pleiades\xampp\php7\ext"
upload_tmp_dir = "\pleiades\xampp\tmp"


php.ini
error_log="\pleiades\xampp\php7\logs\php_error_log"
「; Module Settings ;」の下に追記しました。


php.ini
;browscap = "\pleiades\xampp\php7\extras\browscap.ini"
パスを変更しましたが、browscap.ini がないため、無効にしています。


php.ini
session.save_path = "\pleiades\xampp\tmp"
curl.cainfo = "\pleiades\xampp\apache\bin\curl-ca-bundle.crt"
openssl.cafile = "\pleiades\xampp\apache\bin\curl-ca-bundle.crt"

php.ini
;----------------------------
; Pleiades All in One CUSTOM
;----------------------------
;date.timezone = Asia/Tokyo
;zend_extension = "\pleiades\xampp\php7\ext\php_xdebug.dll"
;xdebug.remote_enable = 1
php_xdebug.dll がないため、無効にしています。
また、近くにあった設定を一緒に追加しました。

php.ini の修正が終わったら、Xampp を再起動して、http://localhost/my_app/ にアクセスします。
まだ同じエラーが発生します。
http://localhost/dashboard/phpinfo.php で設定を確認すると、intl は有効になっていませんが、mbstring は有効になりました。

C:\pleiades\xampp\apache\logs\error.log で Apache のエラーログを確認したところ、
以下のように出力されていました。

php.ini
PHP Warning:  PHP Startup: Unable to load dynamic library 'intl'

確かに intl が読み込めていないようです。
mbstring が読み込めていることから、php.ini の指定に間違いはなさそうです。
あとは、intl が独自に読み込んでいる設定ファイルなどがあり、
そのパスがずれていることが考えられます。

初心に返り、もう1度CakePHP本家のサイトを見てます。
すると、XAMPP は intl が有効になっているが、WAMP は自分で有効にする必要があると書いてあります。
今回は XAMPP を使用しているため無視していましたが、
どうやら PHP7.2 にしたことで、自分で反映する必要があるようです。
C:/pleiades/xampp/php7 配下の icu*.dll というファイルを apache/bin に全てコピーします。
apache/bin には、既に icudt57.dll などが入っていますが、
どうやら PHP7.2 から、icudt61.dll などにファイル名が変わったようです。
PHP7.1 にバージョンを上げた場合はあっさり動いたかもしれません。

XAMPPを再起動して、http://localhost/my_app/ にアクセスします。
ようやく正常にページが表示されるようになりました。



http://localhost/dashboard/phpinfo.php でも、
intl が有効になっていることが確認できました。