やっぱ、CakePHP2 だね


何というか、もしかして今この世の中にはphp5.3のサーバーがすっごい大量にあって、バージョンを上げたくても上げられなくて、予算もないからそれ使い続けるしかなくて、もうこれから当分の間は5.3でやっていくしかないんじゃないだろうか、という気がしてきた。
5.3かー。
というわけで今ここに

```
public_html/shop
```

というようなWebサイトの公開ディレクトリがあって、ここにシステムを構築することになったとする。
cakephpのアプリの本体はpublic_htmlの並びに置くことにして、まずはcomposerの設定から。

```
mkdir cakephp
cd cakephp
vim composer.json
```

```json:cakephp/composer.json
{
    "name": "shop",
    "repositories": [
        {
            "type": "pear",
            "url": "http://pear.cakephp.org"
        }
    ],
    "require": {
        "cakephp/cakephp": ">=2.8.0,<3.0.0"
    },
    "require-dev": {
        "phpunit/phpunit": "3.7.*",
        "cakephp/debug_kit" : "^2.2.0",
        "cakephp/cakephp-codesniffer": "^1.0.0"
    },
    "config": {
        "vendor-dir": "Vendor/",
        "secure-http": false
    }
}
```

インストールする。


```
sudo composer install
```

で、パーミッションを自分にしておく。

```bash
sudo chown -R mymac:staff ../cakephp
```

で、プロジェクト作成する。

```bash
Vendor/bin/cake bake project app
```

こうして作られたapp以下のファイルだが、tmp 以下のフォルダーに空ファイルが作られていなくて、gitでコミットされないので.gitkeepを作っておく。

```
touch app/tmp/cache/models/.gitkeep
touch app/tmp/cache/persistent/.gitkeep
touch app/tmp/cache/views/.gitkeep
touch app/tmp/logs/.gitkeep
touch app/tmp/sessions/.gitkeep
touch app/tmp/tests/.gitkeep
```

ここで、cakephp/app 以下にwebrootが作られるので、その中身をpublic_html/shop以下にコピーする。

```bash
cp -r app/webroot ../public_html/shop
```

で、コピーしたindex.phpを編集する。

```bash
vim ../public_html/shop/index.php
```

以下の3箇所編集。

```php:public_html/shop/index.php
define('APP_DIR', 'cakephp' . DS . 'app');
define('CAKE_CORE_INCLUDE_PATH',  ROOT . DS . 'cakephp' . DS . 'Vendor' . DS . 'cakephp' . DS . 'cakephp' . DS . 'lib');
$vendorPath = ROOT . DS . 'cakephp' . DS . 'Vendor' . DS . 'cakephp' . DS . 'cakephp' . DS . 'lib';
```

public_html/shop/test.php も同様にしておく。

データベース接続設定をしておく。（見れば分かる）

```bash
vim app/Config/database.php
```

```php:cakephp/app/Config/database.php
	public $default = array(
		'datasource' => 'Database/Mysql',
		'persistent' => false,
		'host' => 'localhost',
		'login' => 'user',
		'password' => 'password',
		'database' => 'database_name',
		'prefix' => '',
		//'encoding' => 'utf8',
	);

	public $test = array(
		'datasource' => 'Database/Mysql',
		'persistent' => false,
		'host' => 'localhost',
		'login' => 'user',
		'password' => 'password',
		'database' => 'test_database_name',
		'prefix' => '',
		//'encoding' => 'utf8',
	);
```

プラグインを有効にする。


```bash
vim app/Config/bootstrap.php
```

以下の設定を追加。


```php:cakephp/app/Config/bootstrap.php
App::build(array(
    'Vendor' => array(ROOT . DS . 'cakephp' . DS . 'Vendor' . DS),
    'Plugin' => array(ROOT . DS . 'cakephp' . DS . 'Plugin' . DS)
));

CakePlugin::loadAll();
```

Debug Kitツールバーを使えるようにする。

```bash
vim app/Controller/AppController.php
```


```php:cakephp/app/Controller/AppController.php
class AppController extends Controller {
    var $components = array( 'DebugKit.Toolbar');
}
```

このツールバーはデバッグレベル0（プロダクション）の時は自動で消えるので心配ない。


一発bakeして動作確認する。


```bash
cd app
Console/cake bake
```

入力応答画面になるので、モデル、コントローラ、ビューに順に作って、ブラウザから確認


テストも動作確認しておく。


```bash
vim Test/Case/Model/MemberTest.php
```

```php:cakephp/app/Test/Case/Model/MemberTest.php
    public function testFindMember() {
        $this->assertEquals(1, 1);
    }
```


ブラウザからtest.phpにアクセスして合格することを確認。