CakePHPチュートリアル実施メモ（日本向け補足付）

# はじめに
CakePHPのチュートリアルを実施した際に、日本向けの設定が追加で色々必要だったので、その辺(※)も含めて整理しました。

[CakePHP ブログチュートリアル](http://book.cakephp.org/2.0/ja/getting-started.html)の、「Cakeのダウンロード」～「mod_rewriteについて」に相当する内容です。

※「タイムゾーン設定」「MySQLの文字コード設定」

# 環境
CentOS 6.5
PHP 5.3.3
CakePHP 2.4.5
Apache 2.2.15
MySQL 5.1.71

ApacheやらMySQLやらは既に動作している状態からのスタートです。

# 準備

```bash
$ yum install wget -y
$ yum install php-mysql -y
```

# Cakeのダウンロード

```bash
# ダウンロード
$ wget https://github.com/cakephp/cakephp/archive/2.4.5.tar.gz
$ tar zxvf 2.4.5

# apacheのドキュメントルートに配置
# 当記事では直下ではなくその配下の "cake_2_0" に配置しています
$ mv cakephp-2.4.5/ /var/www/html/cake_2_0
```

# Tmpディレクトリのパーミッション

## whoamiチェック
```bash
$ cd /var/www/html/cake_2_0
$ vim whoami.php
```

```php:whoami.php
<?php echo exec('whoami'); ?>
```

whoami.phpにアクセスし、実行ユーザを確認
http://example.com/cake_2_0/whoami.php

結果が`apache`だったとして進めます。

```bash
# 権限設定
$ chown -R apache app/tmp
```

# タイムゾーン設定
## Linuxのタイムゾーン設定

```bash
$ ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime -f
```

## core.phpのタイムゾーン設定をコメントアウト
```bash
$ vim app/Config/core.php
```

```core.php
//date_default_timezone_set('UTC');
```

## php.iniのタイムゾーン設定
```bash
$ vim /etc/php.ini
```

```ini:php.ini
[Date]
; Defines the default timezone used by the date functions
date.timezone = "Asia/Tokyo"
```

apacheを再起動しておきます。

# MySQLの文字コード設定
```bash
$ vim /etc/my.cnf
```

```ini:my.cnf
[mysql]
default-character-set = utf8

[mysqld]
character-set-server  = utf8
collation-server      = utf8_general_ci
default-character-set = utf8
```

mysqlを再起動しておきます。

# ブログデータベースの作成
```bash
# MySQLの準備
$ mysql -uroot -p123456
```

```sql:mysql
/* ユーザ作成 */
CREATE USER cake IDENTIFIED BY '123456';

/* DB作成 */
create database cake;
grant all on cake.* to cake;

exit;
```


```
$ mysql -uroot -p123456 -Dcake
```

```sql:mysql
/* まず、postsテーブルを作成します: */
CREATE TABLE posts (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(50),
    body TEXT,
    created DATETIME DEFAULT NULL,
    modified DATETIME DEFAULT NULL
);

/* それから、テスト用に記事をいくつか入れておきます: */
INSERT INTO posts (title,body,created)
    VALUES ('タイトル', 'これは、記事の本文です。', NOW());
INSERT INTO posts (title,body,created)
    VALUES ('またタイトル', 'そこに本文が続きます。', NOW());
INSERT INTO posts (title,body,created)
    VALUES ('タイトルの逆襲', 'こりゃ本当にわくわくする！うそ。', NOW());
);
```

# Cakeのデータベース設定

```bash
# 雛形をコピー
$ cp app/Config/database.php.default app/Config/database.php

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

```php:database.php
<?php
class DATABASE_CONFIG {

        public $default = array(
                'datasource' => 'Database/Mysql',
                'persistent' => false,
                'host' => 'localhost',
                'login' => 'cake',
                'password' => '123456',
                'database' => 'cake',
                'prefix' => '',
                'encoding' => 'utf8',
        );
}
?>
```

# 追加の設定（salt, cipherSeed）

## ランダム文字列生成

### 参考
http://d.hatena.ne.jp/pasela/20120710/random

```bash
# salt生成
$ cat /dev/urandom | tr -dc 'a-zA-Z0-9_!@#$%&+-' | fold -w 128 | head -n 1

# cipherSeed生成
$ cat /dev/urandom | tr -dc '0-9' | fold -w 128 | head -n 1
```

```php:core.php
Configure::write('Security.salt', '生成したsalt');
Configure::write('Security.cipherSeed', '生成したcipherSeed');
```

# httpd.confでmod_rewriteを有効にする

```bash
$ vim /etc/httpd/conf/httpd.conf
```

```httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so

<Directory "/var/www/html/cake_2_0">
  Options FollowSymLinks
  AllowOverride All
</Directory>
```

# .htaccessを３箇所に配置

```apache:/var/www/html/cake_2_0/.htaccess
<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteBase   /cake_2_0
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]
</IfModule>
```

```apache:/var/www/html/cake_2_0/app/.htaccess
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase   /cake_2_0/app
    RewriteRule    ^$    webroot/    [L]
    RewriteRule    (.*) webroot/$1    [L]
</IfModule>
```

```apache:/var/www/html/cake_2_0/app/webroot/.htaccess
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>
```

# 終わり

あとは、アプリケーションのコードを書いていきましょう。

[ブログチュートリアル - レイヤーの追加](http://book.cakephp.org/2.0/ja/getting-started.html#id6)から続きをしてください。


# おまけ：フォームに自動で作成されるラベルを日本語に変更する方法
```php:add.ctp
echo $this->Form->input('title', array('label' => 'タイトル'));
echo $this->Form->input('body', array('label' => '本文', 'rows' => '3'));
```