FuelPHP【入門】-- CRUDを作った時のメモ(インストールからCRUD作成まで) --


FuelPHPを触ることになったのでまずは練習に[CRUD(create,read,update,insert)](http://ja.wikipedia.org/wiki/CRUD)環境を作ることにした時のメモです。
フレームワーク自体はfuelのgitで管理することを目的とします。


## 環境

* centos6.3
* fuelPHP1.5.3

## 事前準備に必要なもの
* php5.3以上
* mysql

## 参考にしたサイト
* [日本語版ドキュメント(1.5ドキュメント)](http://fuelphp.jp/docs/1.5/)
* [日本語版ドキュメント(genarate)](http://fuelphp.jp/docs/1.5/packages/oil/generate.html)
* [FuelPHP + Gitで幸せになれた。](http://ma2k8.hateblo.jp/entry/2012/11/25/043042)

## 公式サイトからFuelPHPを取得する

[公式サイト](http://fuelphp.com/)にいってDownloadボタンをポチッと押して展開したいディレクトリでunzipする。
(今回はlo.fuel.master.orgってディレクトリにDLしたfuelPHPを展開する)
公式では

```shell
# oil を Web からクイックインストールします
$ curl get.fuelphp.com/oil | sh
# oil が、たった今、インストールされました。Sites ディレクトリで blog プロジェクトを作ります
$ cd Sites/
$ oil create blog
```

上記のような形で記載されていますが、これをすると/usr/local/binに[oilコマンド](http://fuelphp.jp/docs/1.5/packages/oil/generate.html)（genarateコマンド）がインストールされてしまうので複数のfuelPHPをローカル運用するときに困りそうなのでDLしてくることにしました。

構成はこんな感じ

```shell
lo.fuel.master.org/ #fuelPHP本体の落とし先（適時自分の環境に読み替えてください）
| docs/
| fuel/
| public/
| | assets/
| | index.php #ドキュメントルート
| CHANGELOG.md
| CONTRIBUTING.md
| README.md
| TESTING.md
| build.xml
| oil
```

## core,packageをgitでサブモジュール化する

FuelPHP自体のアップデート時に対応できるように一旦落としたcore,packageを削除します。

```shell
cd lo.fuel.master.org
rm -rf fuel/core fuel/packages
mkdir fuel/packages
```

git(submodule)を実行する

```shell
cd lo.fuel.master.org

git submodule add git://github.com/fuel/core.git fuel/core
git submodule add git://github.com/fuel/oil.git fuel/packages/oil
git submodule add git://github.com/fuel/auth.git fuel/packages/auth
git submodule add git://github.com/fuel/parser.git fuel/packages/parser
git submodule add git://github.com/fuel/orm.git fuel/packages/orm
git submodule add git://github.com/fuel/email.git fuel/packages/email
git submodule add git://github.com/fuel/log.git fuel/packages/log
git submodule add git://github.com/fuel/docs.git docs
```

チェックアウト

```shell
cd lo.fuel.master.org

git submodule foreach 'git checkout 1.5/master'
```



## 設定ファイル(fuel/app/config/development/db.php)の編集

色々なフレームワーク同様にenvirment(環境設定)毎に設定ができます。デフォルトの環境設定はdevelopmentなのでfuel/app/config/development/db.phpでdbの設定を行います。
ちなみに環境変数を指定しているところはfuel/app/bootstrap.phpにあります。


```shell
Fuel::$env = (isset($_SERVER['FUEL_ENV']) ? $_SERVER['FUEL_ENV'] : Fuel::DEVELOPMENT);
```

### fuel/app/config/development/db.php

```php:fuel/app/config/development/db.php
<?php
/**
 * The development database settings. These get merged with the global settings.
 */
return array(
	'default' => array(
		'type' => 'mysqli',
		'connection'  => array(
			'hostname' => 'hostname',
			'port' => '',
			'database' => 'database名',
			'username'   => 'ユーザー名',
			'password' => 'パスワード',
			'presistent' => false
		),
		'enable_cache' => false,
		'profiling' => true,
	),
);
```


## ormの設定

ORMの設定を有効にします

```php:fuel/app/config/config.php
<?php
.
.
.
	//ここの項目のコメントを外してください
	'always_load'  => array(
		'packages'  => array(
			'orm',
		),
.
.
.
//デフォルトのコメントが記載されていますが割愛します
	),

```


## scaffold機能でCRUD環境を作る
[scaffold概要(Ruby on Railの説明)](http://www.techscore.com/tech/Ruby/Rails/quick-start/Rails4/4-1/)から参照で

>4.1 scaffold概要
Railsには、コードを自動生成するジェネレータが複数用意されています。ここでは、「scaffold」というジェネレータを紹介します。
scaffold（「足場」という意味）は、データベースのテーブルへの登録（CREATE）、参照（READ）、更新（UPDATE）、削除（DELETE）（英語の頭文字をとって、「CRUD」といいます）を行うWebアプリケーションのひな形となるソースコードを自動生成します。scaffoldを実行させれば、「足場」という名の通り、最低限のCRUDを行うWebアプリケーションを作成することができます。
実際の開発においては、使用する機会が少ないかと思いますが、ここではRailsの基本構造を知るために利用します。

公式でもrailの概念を借用しましたと書いてあります

```shell
cd lo.fuel.master.org
php oil g scaffold monkey name:string description:text
    Created model: APPPATH/classes/model/monkey.php
    Created migration: APPPATH/migrations/001_create_monkeys.php
    Created controller: APPPATH/classes/controller/monkeys.php
    Created view: APPPATH/views/monkeys/index.php
    Created view: APPPATH/views/monkeys/view.php
    Created view: APPPATH/views/monkeys/create.php
    Created view: APPPATH/views/monkeys/edit.php
    Created view: APPPATH/views/monkeys/_form.php
```

指定したmonkeyがcontrollerとmodel名でname:string description:textがテーブルmonkeysの内容を示しています


## マイグレーション(migrate)の実行

マイグレーションとはDBの設定反映を行うためのコマンドです。
oilのscaffoldで作成したmodelの設定反映をDBにも行うためのものです。
APPPATH/migrations/003_create_monkeys.phpを見るとわかりやすいです。

```php:fuel/app/migration/001_create_monkeys.php
<?php

namespace Fuel\Migrations;

class Create_monkeys
{
	public function up()
	{
		\DBUtil::create_table('monkeys', array(
			'id' => array('constraint' => 11, 'type' => 'int', 'auto_increment' => true),
			'name' => array('constraint' => 255, 'type' => 'varchar'),
			'description' => array('type' => 'text'),
			'created_at' => array('constraint' => 11, 'type' => 'int', 'null' => true),
			'updated_at' => array('constraint' => 11, 'type' => 'int', 'null' => true),

		), array('id'));
	}

	public function down()
	{
		\DBUtil::drop_table('monkeys');
	}
}
```

最初にテーブルを作成したいのでup()を実行することになります。

```shell
cd lo.fuel.master.org
php oil refine migrate
```

## http://localhost/monkeyにアクセスする

これでCRUD環境ができていますのでhttp://localhost/monkeyにアクセスしてください。

実際の開発ではあまり使う機会は少ないと思いますが、最初の一歩にはソースの理解と流れを知るにはちょうどいいかと。