PHP
CakePHP
CentOS
Apache
Composer

Check! はじめての CakePHP2 〜 bake でプロジェクトスケルトンを利用する

More than 1 year has passed since last update.

こんにちは、cloudpack@dz_ こと大平かづみです。

Prologue - はじめに

Blog Tutorial がだいたいできたところで、 composer による CakePHP インストールと、bake によるプロジェクトのスケルトン作成を試してみました。

以下のドキュメントに沿って進めます。

手順のポイント

composer で CakePHP2 をインストール

アプリを置くディレクトリに以下の composer.json を作成します。アプリ名は任意です。

composer.json
{
    "name": "example-app",
    "require": {
        "cakephp/cakephp": "2.6.*"
    },
    "config": {
        "vendor-dir": "Vendor/"
    }
}

そして、composer でインストールしましょう。composer は、そのディレクトリに実行ファイルを置いて php composer で実行する方法と、グローバルに設置して composer で実行する方法があります。私はグローバルで設置しました。詳細は公式ドキュメントのインストール手順などを参照くださいませ。

# composer でインストール
composer install

ディレクトリはこのような構成になりました。

tree -L 1
.
├── Vendor
│   ├── autoload.php
│   ├── bin
│   ├── cakephp
│   └── composer
├── composer.json
└── composer.lock

bake でプロジェクトのスケルトン作成

そして、プロジェクトのスケルトン(空のプロジェクト)を作りましょう。

# bake で CakePHP2 のスケルトンを作成
Vendor/bin/cake bake project .

Welcome to CakePHP v2.6.8 Console
---------------------------------------------------------------
App : cakeapp2
Path: /var/www/html/cakeapp2/
---------------------------------------------------------------
Skel Directory: /var/www/html/cakeapp2/Vendor/cakephp/cakephp/lib/Cake/Console/Templates/skel
Will be copied to: /var/www/html/cakeapp2/.
---------------------------------------------------------------
Look okay? (y/n/q) 
[y] > y
---------------------------------------------------------------
Created: . in /var/www/html/cakeapp2/.
---------------------------------------------------------------
 * Random hash key created for 'Security.salt'
 * Random seed created for 'Security.cipherSeed'
 * Cache prefix set
 * app/Console/cake.php path set.
CakePHP is not on your `include_path`, CAKE_CORE_INCLUDE_PATH will be hard coded.
You can fix this by adding CakePHP to your `include_path`.
 * CAKE_CORE_INCLUDE_PATH set to /var/www/html/cakeapp2/Vendor/cakephp/cakephp/lib in webroot/index.php
 * CAKE_CORE_INCLUDE_PATH set to /var/www/html/cakeapp2/Vendor/cakephp/cakephp/lib in webroot/test.php
   * Remember to check these values after moving to production server
Project baked successfully!

はい、簡単にプロジェクトのスケルトンが作成されました!プロジェクトの状態はこんな感じです。Blog Tutorial とはディレクトリ構成が異なりますね。

tree -L 1
.
├── Config
├── Console
├── Controller
├── Lib
├── Locale
├── Model
├── Plugin
├── Test
├── Vendor
├── View
├── composer.json
├── composer.lock
├── index.php
├── tmp
└── webroot

初期設定

タイムゾーンの設定

Config/core.php
...

/**
 * Uncomment this line and correct your server timezone to fix
 * any date & time related errors.
 */
        //date_default_timezone_set('UTC');
        date_default_timezone_set('Asia/Tokyo');    // <---- 'Asia/Tokyo' を指定

...

データベース接続情報の設定

# テンプレート `database.php.default` をコピー
cp Config/database.php.default Config/database.php
Config/database.php
...

        public $default = array(
                'datasource' => 'Database/Mysql',
                'persistent' => false,
                'host' => 'localhost',
                'login' => 'user',             // <---- データベースのユーザー名
                'password' => 'password',      // <---- データベースのユーザーのパスワード
                'database' => 'database_name', // <---- データベース名
                'prefix' => '',
                //'encoding' => 'utf8',
        );

...

$test も必要があれば設定してください。

DebugKitプラグインのインストールとロード

DebugKitプラグインのインストール

composer.json があるディレクトリで以下を実行します。

# DebugKitプラグインをインストール
composer require --dev cakephp/debug_kit "2.2.*"

DebugKitプラグインのロード

Config/bootstrap.php
...

/**
 * Plugins need to be loaded manually, you can either load them one by one or all of them in a single call
 * Uncomment one of the lines below, as you need. Make sure you read the documentation on CakePlugin to use more
 * advanced ways of loading plugins
 *
 * CakePlugin::loadAll(); // Loads all plugins at once
 * CakePlugin::load('DebugKit'); //Loads a single plugin named DebugKit
 *
 */
CakePlugin::load('DebugKit');    // <---- ロード処理を明記

...

DebugKitツールバーをコンポーネントに設定

Controller/AppController.php
...

class AppController extends Controller {
  var $components = array('DebugKit.Toolbar');    // <---- コンポーネントを追加
}

トラブルシューティング

bake project でタイムゾーンの Warning

bake project で、以下の Warning が出てしまう場合は、以下のように /etc/php.ini でタイムゾーンの設定をしてください。

Vendor/bin/cake bake project .

PHP Warning:  strtotime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'UTC' for 'UTC/0.0/no DST' instead in /var/www/html/cakeapp2/Vendor/cakephp/cakephp/lib/Cake/Cache/CacheEngine.php on line 60

...<略>...

Welcome to CakePHP v2.6.8 Console
---------------------------------------------------------------
App : cakeapp2
Path: /var/www/html/cakeapp2/
---------------------------------------------------------------
Skel Directory: /var/www/html/cakeapp2/Vendor/cakephp/cakephp/lib/Cake/Console/Templates/skel
Will be copied to: /var/www/html/cakeapp2/.
---------------------------------------------------------------
Look okay? (y/n/q) 
[y] > 

php.ini で、 date.timezone = の部分がコメントアウトされているので、 "Asia/Tokyo" を設定して下さい。

/etc/php.ini
...

[Date]
date.timezone = "Asia/Tokyo"

...

Epilogue - おわりに

昨日の記事 と少し似ていますが、こちらの方がすっきりプロジェクトを始められますね!

さぁ、ざくざく理解を進めてまいります! :octocat:

近況

最近

Phalcon関連

fluentd関連

技術ブログ寄稿

cloudpack技術ブログでも、AWS Lambda や 運用ツール Serf に関して記事を書いています。ご興味あれば読んでいただけると嬉しいです!