FuelPHPで簡単なシステムを作って開発の雰囲気をつかむ

# 調査

http://blog.a-way-out.net/blog/2015/05/21/fuelphp-1-7-3/

> FuelPHP 1.xの最終バージョンが1.8になり、それは、2.0がリリースされるときにリリースされます。1.8はLTS版となり、新機能は追加されませんが、バグ修正とセキュリティ修正は長期間提供されます。

とのことなので、枯れた最新安定版は今は1.7系を攻めておけば良いと理解しました。実際、本家サイトに行くと、1.7.3をDownloadするように書かれています。

http://fuelphp.com/

# 方針

- composerでの開発
- 仮想環境を使わずにローカル開発
- MAMPやXAMPPの環境前提
- 文法は最新の方式に近づけておく（`array`をいっぱい書かない）

# 手順

## 前提

- composerは既にインストールされているものとする。
  - Windowsの場合はインストーラでやれるらしい http://qiita.com/mikoski01/items/266469535e860312145d
- PHPのパスはMAMPに通っているものとする。

## composerでのインストール

```terminal
composer create-project fuel/fuel:dev-1.7/master --prefer-dist fuelsample
```

ダラダラダラっと沢山のファイルがダウンロードされます。

途中GitHubのトークンを作るように促された場合には、書いてあるURL（ こんなの `https://github.com/settings/tokens/new?scopes=repo&description=Composer+on+AREION.local+2015-09-13+1338` ）を 貼ってやればGitHub上のトークン作成画面へ飛べます。作ったらトークンをコピペ（表示されないけど、コピペ）してエンターすれば良いです。

## サーバ起動

下記のどちらかで出来る。MAMPを入れているなら２番目の方法で良いかな？

1. `php oil server`を打つ
1. publicディレクトリをApacheのWEBルートにする

起動してWelcome画面が無事表示されれば大成功！

## 最初の一歩目の情報は？

あまり情報が日本語サイトからはリンクされていません。通常チュートリアルがありそうなのだけれども、外部サイトへのリンクになっていました。

- [Wikiがあった]( http://wiki.fuelphp1st.com/wiki/index/FuelPHP%20%E3%81%AE%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB) のでこちらは良いかも
- 上記Wikiからリンクされていたチュートリアル (
 http://blog.a-way-out.net/blog/2014/07/24/fuelphp-blog-tutorial-part1/)
  
## 上記チュートリアルを参考にして簡単なアプリを作る

- 簡単なBBS。誰でも投稿できて時系列で一覧されるだけ
- 今回はスレッドを作成するところまで
- タイトル、本文の入力必須
- つまり、Scaffoldに毛の生えた程度のもの

### 準備

#### 設定でORMを有効にする

`always_load`のキーを活かして、その中の`orm`も活かしましょう。

```php:fuel/app/config/config.php(259行目付近）
    'always_load'  => array(
		'packages'  => array(
		  'orm',
		),
    )
```

#### DBを作成する

`phpMyAdmin`から作っていいでしょう。Userを作成して、同名のDBを作って割り当てるオプションを使うのが簡単です。

私の場合には下記のようにしました。設定も一緒にしておきます。

- `ユーザ`: `fuelsample`
- `DB`: `fuelsample`
- `パスワード`: `testtest`

一応絵文字にも対応できるようにcharsetを指定しました（きくんですよね？違う？）。
参考にしたのは下記です。
http://fuelphp.jp/docs/1.7/classes/database/introduction.html

```php:fuel/app/config/development/db.php

return [
	'default' => [
		'connection'  => [
			'dsn'        => 'mysql:host=localhost;dbname=fuelsample',
			'username'   => 'fuelsample',
			'password'   => 'testtest',
		],
		'charset'        => 'utf8mb4',
	],
];
```

### Scaffold

```terminal
php oil generate scaffold thread title:varchar[255] body:text
```

ただし、MySQLを利用している人は下記でやらないと created_at、updated_atがint型になるので注意。 [こちら](http://qiita.com/ms2sato/items/880a5603a8601298c297) 参照のこと。

```terminal
php oil generate scaffold thread title:varchar[255] body:text --mysql-timestamp 
```

`php oil destroy`は無さそうなので、失敗したらちゃちゃっと戻す感じでは使えない様子。

出来上がったファイル群の中で気になるのはマイグレーションですが、`created_at`、`updated_at`も作られ、`id`も`autoincrement`するものでした。

【注意！】
下記のような事があるので、MySQLのTimestampが使いたい場合にはオプション指定が必要かと。
http://qiita.com/ms2sato/items/880a5603a8601298c297

### Migrate

```terminal
php oil refine migrate
```

結果を見ると、指定しなければデフォルトでNOT_NULL制約のようです。CakePHP3と同じですね。

### アクセス！

`/thread/index`へアクセスしてみましょう。ちゃんと表示されたでしょうか。新規作成、一覧、更新、削除（いわゆるCRUD）ができているはずです。めっちゃ簡単ですね。この辺はScaffoldを実現しているシステムでは結構一般的ですけれども。

もしも下記のように

```
Class 'Orm\Model' not found
```

と出てしまう時には、 `uel/app/config/config.php`で、`always_load`と`orm`のところのコメントがちゃんと外れているか確認したほうが良さそうです。

# おしまいに

この次に気になるのはJOIN系の扱いなので、そんなエントリを次に書きたいですね！

結果のコードはここに置いときます。
https://github.com/ms2sato/fuelsample

以下に続きます

- リレーション
  - [JOINして読み出しまで] (http://qiita.com/ms2sato/items/5aef782a669bea7edc12)
  - INSERT
- [created_at、updated_at がintegerになっているので注意](http://qiita.com/ms2sato/items/880a5603a8601298c297)