【Composer, XAMPP】CakePHP2とDebugKitをインストールする

ComposerでCakePHP2とDebugKitをインストールします。この記事はXAMPPのインストール及び、php.exeがあるフォルダへの環境変数が設定されていることを前提としています。基本的にComposer ドキュメント日本語訳CakePHP2 応用インストールの通りですが、フォルダ構成を個人的に変更しています。

環境
PHP
7.0
CakePHP
2.10.1

Composer のダウンロード

Windows付属のコマンドプロンプトを使ってダウンロードします。XAMPPのphpフォルダに環境変数を設定しているので、今回はそちらにダウンロードすることにします。以下のコマンドでcomposer.pharがダウンロードがされます。

$ php -r "eval('?>'.file_get_contents('https://getcomposer.org/installer'));"

composer.bat を作成

Composerをphp composer.pharではなくcomposerで実行できるようにします。composer.pharをダウンロードしたフォルダ(今回はXAMPPのphpフォルダ)に、コマンドプロンプトでバッチファイルを作成します。以下のコマンドの実行でcomposer.batというバッチファイルができます。

$ echo @php "%~dp0composer.phar" %*>composer.bat

ダウンロードしたComposerのバージョンを確認してみます。

$ composer --v
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version x.x.x xxxx-xx-xx xx:xx:xx

composer.json の作成

CakePHPとDebugKitをインストールするためのcomposer.jsonを開発フォルダに作ります。今回はC:¥Users¥xampp¥htdocs¥appを開発フォルダとします。なお、インストールするバージョンはそれぞれ適当なものにしてください。※初めにも書きましたが公式とは構成が異なっています。

composer.json
{
    "name": "my-app",
    "require": {
        "cakephp/cakephp": "2.10.*"
    },
    "require-dev": {
        "cakephp/debug_kit": "~2"
    },
    "extra": {
        "installer-paths": {
            "src/Plugin/{$name}/": ["type:cakephp-plugin"]
        }
    }
}

この時点でのフォルダ構成は以下となっています。

app/
`-- composer.json

CakePHP, DebugKit をインストール

では、作成したcomposer.jsonを元にインストールをします。開発フォルダへ移動したあと、インストールコマンドを実行します。

$ composer install
Loading composer repositories with package noticermation
Updating dependencies (including require-dev)
Package operations: 3 installs, 0 updates, 0 removals
  - Installing composer/installers (v1.4.0): Loading from cache
  - Installing cakephp/cakephp (2.10.1): Loading from cache
  - Installing cakephp/debug_kit (2.2.6): Loading from cache
Writing lock file
Generating autoload files

簡単にインストールが完了しました。この時点のフォルダ構成は以下となっています。

app/
|-- src/
|   `-- Plugin/
|       `-- DebugKit/
|-- vendor/
|   |-- bin/
|   |-- composer/
|   |-- cakephp/
|   `-- autoload.php
|-- composer.json
`-- composer.lock

CakePHP プロジェクト作成

Bakeでアプリケーションのスケルトンの残り部分(MVCなど)を作成します。

cake.bat の修正

公式の手順ではWindows(XAMPP)でエラーが出てしまいました。原因であるVendor¥bin¥cake.batの7行目を修正します。

-    bash "%BIN_TARGET%" %*
+    cmd /C "%BIN_TARGET%" %*

Bake の実行

プロジェクトを作成します。ここからはWindows付属のPowerShellを使用します。
プロジェクト名をsrcとしていますが、任意の名前にしてください。

$ vendor/bin/cake bake project src
...
...
...
Project baked successfully!

プロジェクトがapp/srcに作成されました。この時点のフォルダ構成は以下となっています。

app/
|-- src/
|   |-- Config/
|   |-- Console/
|   |-- Controller/
|   |-- .../
|   `-- Plugin/
|       `-- DebugKit/
|   |-- .htaccess
|   |-- index.php
|-- vendor/
|   |-- bin/
|   |-- composer/
|   |-- cakephp/
|   `-- autoload.php
|-- composer.json
`-- composer.lock

CakePHPプロジェクト 開発

プロジェクト開発の準備をしていきます。

CAKE_CORE_INCLUDE_PATH の修正

定数CAKE_CORE_INCLUDE_PATHがハードコードされているので、相対パスへと変更します。修正ファイルはwebroot/index.phpwebroot/test.phpです。修正内容は公式サイトの通りです。

ver 2.10.1 は元から相対パス?

今回インストールしたver 2.10.1で作成したプロジェクトでは、CAKE_CORE_INCLUDE_PATHが相対パスで書かれてあり、修正の必要はありませんでした。

今回は個人的にフォルダ構成を変更したので、CAKE_CORE_INCLUDE_PATHを修正します。

webroot/index.php webroot/test.php
// define('CAKE_CORE_INCLUDE_PATH',  ROOT . DS . APP_DIR . DS . 'Vendor' . DS . 'cakephp' . DS . 'cakephp' . DS . 'lib');
define('CAKE_CORE_INCLUDE_PATH',  ROOT . DS . 'vendor' . DS . 'cakephp' . DS . 'cakephp' . DS . 'lib');

cake.php の修正

公式サイトにはありませんがConsole/cake.phpも修正しておきます。composer.jsonの内容が公式通りであれば修正の必要はありません。

// $composerInstall = $root . DS . $appDir . DS . 'Vendor' . DS . 'cakephp' . DS . 'cakephp' . DS . 'lib';
$composerInstall = $root . DS . 'vendor' . DS . 'cakephp' . DS . 'cakephp' . DS . 'lib';

上記の$composerInstallが存在しなければ以下の$installを読み込むようになっています。同じpathにしてしまうと意味がなくなるかもしれませんが……。

// $install = $root . PATH_SEPARATOR . 'C:' . DS . 'xampp' . DS . 'htdocs' . DS . 'app' . DS . 'src' . DS . 'Vendor' . DS . 'cakephp' . DS . 'cakephp' . DS . 'lib';
$install = $root . DS . 'vendor' . DS . 'cakephp' . DS . 'cakephp' . DS . 'lib';

autoload.php を読み込む

Composerが生成したオートローダーautoload.phpbootstrap.phpで読み込みます。

bootstrap.php
require ROOT . DS . 'vendor/autoload.php';
spl_autoload_unregister(array('App', 'load'));
spl_autoload_register(array('App', 'load'), true, true);

DebugKit 有効化

DebugKitを使用できるようにしていきます。今回は全てのプラグインをロードしていますが、必要なプラグインのみのロードもできます。詳しくは公式サイトにあります。

プラグインのロード

bootstrap.phpで使用するプラグインをロードします。

bootstrap.php
CakePlugin::loadAll();

プラグインの有効化

全てのコントローラーで有効化するためAppController.phpにて設定します。

AppController.php
public $components = ['DebugKit.Toolbar']

以上でインストール及び開発準備が終わりました。

おわりに

久々にバージョンを上げましたが、相対パスの修正が無くなり簡単になっていました。