FuelPHPのORMをフォーマット出力するパッケージが便利すぎるよ

# 概要
このパッケージでは、ORMからの出力を以下のように簡単に記述できるようになります。

```php:app/views/*.php
<?php echo ($person->age)? sprintf('%d歳',$person->age):'';?>
↓↓↓
<?php echo $person->formatted_age; ?>
```

DBに格納している値に単位をつけて出力したいケースは多く、また、値が0やNULLだった場合は単位なしで空文字を出力したいといったケースも多いです。
通常はいちいちif文や三項演算子を使ってViewを書いていくと思いますが、非常に冗長になるため、ORMに機能を追加してViewの記述を簡略化してしまおうというものです。
もちろん、その他のメリットも多々あります。

# パッケージ

[Fuel-Package-TraitOrmFormat(ver.2.0)](https://github.com/goosys/Fuel-Package-TraitOrmFormat/tree/2.0)
※ブランチ「2.0」が最新版です。（masterは古い）
※PHP5.4からの機能（Trait）を使っていますので、PHP5.4以上の環境が必要です。

# インストール

```php:composer.json

    "require": {
        "php": ">=5.4",
        "trait-orm-format": "1.*"
    },
    "repositories": [ 
        {
            "type":"package",
            "package":{
                "name":"trait-orm-format",
                "type":"fuel-package",
                "version":"1.7",
                "source":{
                    "type":"git",
                    "url":"https://github.com/goosys/Fuel-Package-TraitOrmFormat.git",
                    "reference":"2.0"
                }
            }
        }
    ],
```
```php:fuel/app/config/config.php
always_load => array(
    packages => array(
        'trait-orm-format'
    ),
    language => array(
        'selector',
        'trait-orm-format'
    )
```

```php:fuel/app/classes/model/*.php
class Model_Person extends \Orm\Model
{
    use Trait_Orm_Format; //この行を追加
```

# 機能

今までも便利でしたが、不具合修正と多少の機能追加をした```2.0```が更に便利になっています。
まずは基本的な使い方の説明です。

## フォーマットを定義

```php:fuel/app/lang/ja/selector.php
    'gender' => array(
        '1' => '男性',
        '2' => '女性'
    ),
    'country' => array(
        'jp' => '日本',
        'us' => 'アメリカ',
    )
```

```php:fuel/app/lang/ja/trait-orm-format.php
    'common' => array(
        'people' => '%d人', //文字列の場合はsprintfにかけて出力
        'age'    => '%d歳',
        'jpy'    => function($val){ return number_format($val).'円'; }, //関数の場合はreturnされた文字列を出力
        'timetodate' => function($val){ return (!empty($val))? date('Y/m/d',$val): ''; }, //created_atなどのタイムスタンプを日付にフォーマットする場合に便利
    ),
    'model' => array(
        'person' => array(
            'age'         => 'common.age',          //共通フォーマットから選択
            'num_friends' => '%d人',                //フォーマットを直接記述
            'gender'      => 'selector.gender',     //選択肢から選択
            'full_address'=> 'related.address.full_address' //$person->address->full_address
            'local'       => 'related.address.formatted_country' //リレーションしたモデルからも再帰的にフォーマット可能
        ),
        'address' => array(
            //'full_address' => '%s',             //そのまま出力してよいものは省略可
            'country'      => 'selector.country', //選択肢から選択
        )
    )
```

## Viewで使用

Viewではこの様に統一的に記述できます。（コメント内は出力結果の例）

```php:fuel/app/views/*.php
<?php echo $person->formatted_age; /* 12歳 */ ?>
<?php echo $person->formatted_num_friends; /* 100人 */ ?>
<?php echo $person->formatted_gender; /* 男性 */ ?>
<?php echo $person->formatted_local; /* 日本 */ ?>
```

## 2.0からの新機能

2.0から、以下２機能が追加されました。

### リレーション先のモデルも再帰的にフォーマットする機能

```php:fuel/app/views/*.php
<?php echo $person->formatted_full_address; /* 東京都新宿区1-1-1-1 */ ?>
```

```Model_Person has_one Model_Address```とリレーションされていて、```$person->address->full_address='東京都新宿区1-1-1-1'```となっていた場合、```empty($person->address)```で実際にデータが入っているかをチェックした上で、```Model_Address```の```full_address```に定義されたフォーマットで出力を行います。

### 同名の関数を実行する機能

モデルに```formatted_```で始まる関数が定義されていた場合、

```php:fuel/app/classes/model/person.php
public function formatted_full_name(){
    return $this->family_name . ' '. $this->first_name;
}
```

このようにアクセスすることができます。

```php:fuel/app/views/*.php
<?php echo $person->formatted_full_name; /* 田中 太郎 */ ?>
```

もちろん、```$person->formatted_full_name()```でも同様の結果となりますが、書き方を統一でき、また、リレーション先のフォーマットとしても使用することが出来るので便利です。