Check! はじめての CakePHP2 ポイントまとめ 〜 Blog Tutorial を動かそう

こんばんは、[cloudpack][] の @dz_ こと[大平かづみ][]です。

Prologue - はじめに
====
[CakePHP2](http://book.cakephp.org/2.0/ja/contents.html "コンテンツ — CakePHP Cookbook 2.x ドキュメント") に触れる機会があったのでメモをまとめます。ちなみに、最新バージョンの `3.x` ではなく、`2.x` 系です。

今回は、手始めにチュートリアルのブログ作成を試しました。

- [ブログチュートリアル &mdash; CakePHP Cookbook 2.x ドキュメント](http://book.cakephp.org/2.0/ja/tutorials-and-examples/blog/blog.html "ブログチュートリアル — CakePHP Cookbook 2.x ドキュメント")

ポイントまとめ
====

実は英語ページ読みながらやってたんですが、日本語ページがあったんですね(笑)

基本的な手順はドキュメントを参考いただくとして、記載されて内部分でつまづいたところの備忘録を書きます。

各種インストール
----
```bash
# apache インストール
yum install httpd

# mysql 関連のインストール
yum install mysql mysql-server

# php 関連のインストール
yum install php php-mysql php-pdo php-mbstring php-mcrypt php-xml
```

事前準備
----
- mysql-server の初期設定
    - [【MySQL, 開発環境】MySQLのインストールと初期設定](http://qiita.com/knife0125/items/3d685f1368a654d5187d "【MySQL, 開発環境】MySQLのインストールと初期設定")
        - いつも忘れてしまいます。今回はこちらを参考にしました。
- mysql ユーザ作成、データベース作成
    - テーブルデータを流すときに必要になりますので、一般的な手順で作成してください。
    - また、 `database.php` に `ユーザ名` 、 `パスワード` 、 `データベース名` を記載する手順があります。
- Apache 起動後、 `phpinfo()` などで、 `pdo_mysql` と `mod_rewrite` が組み込まれていることを確認してください。


CakePHP2の用意
----
(ドキュメントトップから読んでいたのに、このページなぜか読み飛ばしてました…)

- [インストール &mdash; CakePHP Cookbook 2.x ドキュメント](http://book.cakephp.org/2.0/ja/installation.html "インストール — CakePHP Cookbook 2.x ドキュメント")
- [応用インストール &mdash; CakePHP Cookbook 2.x ドキュメント](http://book.cakephp.org/2.0/ja/installation/advanced-installation.html "応用インストール — CakePHP Cookbook 2.x ドキュメント")

トラブルシューティング
====

date.timezone でエラー
----
いざサンプルを動かしてみたら、以下のように `date.timezone` でエラーが発生した場合には、

```
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/lib/Cake/Cache/CacheEngine.php on line 60
```

以下のように `app/Config/core.php` でタイムゾーンを指定できます。

```php:app/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' を指定

...
```

もしくは `/etc/php.ini` を修正します。`date.timezone = ` の部分がコメントアウトされているので、以下のように `"Asia/Tokyo"` を設定して下さい。

```:/etc/php.ini
[Date]
date.timezone = "Asia/Tokyo"
```


mode_rewrite のエラー
----
サンプルブログが動いたものの、CSSがあたってなくて、以下のエラーが表示されているときは、 URLリライティングがうまく行っていません。

```
URL rewriting is not properly configured on your server.	1) Help me configure it 2) I don't / can't use URL rewriting
```

そんなときは以下を参考に、 `httpd.conf` の `AllowOverride` の設定や `.htaccess` の記述を見直してください。

- [URLリライティング &mdash; CakePHP Cookbook 2.x ドキュメント](http://book.cakephp.org/2.0/ja/installation/url-rewriting.html "URLリライティング — CakePHP Cookbook 2.x ドキュメント")

`AllowOverride`の設定は複数箇所あるので、確認してみて下さい。

プラグインのインストールでエラー (phpunit, ext-mcrypt, ext-dom)
----

公式のプラグイン DebugKit などをインストールしようと、 `php composer.phar install` を行うと以下のエラーが返されました。この場合は `php-mcrypt` と `php-xml` をインストールしてください。

```bash
Loading composer repositories with package information
Installing dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - The requested PHP extension ext-mcrypt * is missing from your system.
  Problem 2
    - phpunit/phpunit 3.7.9 requires ext-dom * -> the requested PHP extension dom is missing from your system.
...
```

DebugKitがインストールされない
----
DebugKitプラグインをインストールしたはずなのに、以下のようにインストールされていないことになっていました。

```
DebugKit is not installed. It will help you inspect and debug different aspects of your application.
```

どうやら、プラグインのロードが行われていません。こちらのCakePHP2系への[DebugKitを導入](http://kwski.net/cakephp-2-x/1005/)を参考に以下を対処しました。

```php:app/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');    // <---- ロード処理を明記

...
```

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

DebugKitが見つからない
----
今度はプラグインのロードに失敗しました。

```
Error: The application is trying to load a file from the DebugKit plugin

Error: Make sure your plugin DebugKit is in the app/Plugin directory and was loaded
```

どうやら、CakePHPは `<DocumentRoot>/app/Plugin` を見に行くのに、composer でインストールしたプラグインは `<DocumentRoot>/Plugin` に格納されたので見つからなかったようです。私は以下のようにシンボリックリンクを貼りました。
 
```bash
# <DocumentRoot>/app/Plugin/DebugKit に <DocumentRoot>/Plugin/DebugKit へのシンボリックリンクを作成
ln -s /var/www/html/Plugin/DebugKit app/Plugin/DebugKit
```

Epilogue - おわりに
====

最近少しずつウェブサーバーを立てるのが早くなってきました（まだまだですが）。はじめてシリーズもだんだんと雑に…もとい手慣れてきました。そろそろ、はじめてシリーズ脱却か！？精進します！

近況
====

最近
----
- [Check! はじめての Zabbix インストール on Debian x Amazon RDS](http://qiita.com/dz_/items/3e85dd369c8053ceffe8 "Check! はじめての Zabbix インストール on Debian x Amazon RDS")
- [[初メモ] はじめての Tomcat 〜 つまづいたところまとめ (Java のバージョン指定、起動パラメータ など)](http://qiita.com/dz_/items/879ca03b5b594007ceab "[初メモ] はじめての Tomcat 〜 つまづいたところまとめ (Java のバージョン指定、起動パラメータ など)")
- [Check! はじめての CakePHP2 ポイントまとめ 〜 Blog Tutorial を動かそう](http://qiita.com/dz_/items/2dd4c68f43484f0f78da "Check! はじめての CakePHP2 ポイントまとめ 〜 Blog Tutorial を動かそう") ← :new: :sparkles:

Phalcon関連
----

- [爆速フレームワーク!! Phalcon PHP Framework](
http://qiita.com/dz_/items/55ae18f7fe3a873bace1 "爆速フレームワーク!! Phalcon PHP Framework")
- [Meet Volt ! Phalcon 謹製テンプレートエンジン Volt - from 第71回 PHP勉強会](http://qiita.com/dz_/items/974a90b32ba6a6e38182 "Meet Volt ! Phalcon 謹製テンプレートエンジン Volt - from 第71回 PHP勉強会")
- [Meet Phalcon! - Phalcon PHPフレームワークを Nginx on Amazon EC2 にインストール！](http://qiita.com/dz_/items/e70d61487224b854b971 "Meet Phalcon! - Phalcon PHPフレームワークを Nginx on Amazon EC2 にインストール！")

fluentd関連
----
- [Check! はじめての fluentd を Amazon Linux で動かしてみる (ログを PHP から送る)](http://qiita.com/dz_/items/960319ffffa0d7355f8c "Check! はじめての fluentd を Amazon Linux で動かしてみる (ログを PHP から送る)")
- [Check! はじめての Fluentd 〜 IAMロールで Amazon EC2 と S3 間をセキュアに](http://qiita.com/dz_/items/224607c84112ccafa2d6 "Check! はじめての Fluentd 〜 IAMロールで Amazon EC2 と S3 間をセキュアに")

技術ブログ寄稿
----

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

- <a href="http://blog.cloudpack.jp/author/oohira/" title="大平 かづみ の記事一覧 | cloudpack技術情報サイト"　target="_blank" rel="nofollow">大平 かづみ の記事一覧</a>

[cloudpack]:https://cloudpack.jp/ "cloudpack（クラウドパック） 400社を超える導入実績! EC2などAWSクラウドの導入設計、構築、運用保守サービス"
[cloudpack-blog]:http://blog.cloudpack.jp/ "cloudpack技術情報サイト"
[大平かづみ]:http://blog.cloudpack.jp/author/oohira/ "大平かづみの記事一覧"