FuelPHP1.7.3にsmartyと設定を追加する

## 概要
FuelPHPのビューでSmartyを使う要件があったので、設置したメモを残します。

## ComposerでSmartyを追加する
まず、composer.jsonに「"smarty/smarty": "3.*"」を追加します。

```json:composer.json
"require": {
    "php": ">=5.3.3",
    "composer/installers": "~1.0",
    "fuel/core": "dev-1.7/master",
                 ・
                 ・
                 ・
    "smarty/smarty": "3.*"
    },
```

composer.jsonの変更を反映させる。

```sh
$ php composer.phar self-update
$ php composer.phar update
```
**※ composer.lockファイルも更新されるので、gitに一緒にコミットしましょう。**

## Parserパッケージ有効化
FuelPHPのconfig.phpを修正する。

```php:fuel/app/config/config.php
/**************************************************************************/
/* Always Load                                                            */
/**************************************************************************/
'always_load'  => array(

    /**
     * These packages are loaded on Fuel's startup.
     * You can specify them in the following manner:
     *
     * array('auth'); // This will assume the packages are in PKGPATH
     *
     * // Use this format to specify the path to the package explicitly
     * array(
     *     array('auth' => PKGPATH.'auth/')
     * );
     */
     'packages'  => array(
        'orm',
        'parser'
     ),
```

## parser.phpの作成

「fuel/packages/parser/config/parser.php」を修正するのが手っ取り早いですが、
composerで管理しているファイルなので修正NGとなります。

他の方法を探したところ、下記のファイルを作成すると設定を上書きできるようです。

下記オリジナル設定を追加する

- 拡張子を「tpl」に変更する
- デリミタを「{%, %}」に変更する

```php:fuel/app/config/parser.php
<?php

return array(
    // 拡張の定義
    'extensions' => array(
        'tpl'    => 'View_Smarty',
    ),
    // Smarty設定 ( http://www.smarty.net/documentation )
    'View_Smarty' => array(
        'auto_encode' => true,
        'delimiters'  => array('left' => '{%', 'right' => '%}'),
        'environment' => array(
            'compile_dir'       => APPPATH.'tmp'.DS.'Smarty'.DS.'templates_c'.DS,
            'config_dir'        => APPPATH.'tmp'.DS.'Smarty'.DS.'configs'.DS,
            'cache_dir'         => APPPATH.'cache'.DS.'Smarty'.DS,
            'plugins_dir'       => array(),
            'caching'           => false,
            'cache_lifetime'    => 0,
            'force_compile'     => false,
            'compile_check'     => true,
            'debugging'         => false,
            'autoload_filters'  => array(),
            'default_modifiers' => array()
        )
    )
);
```

## 各種tmpフォルダを作成する
Smartyフォルダとさらにその下層にconfigs, templates_cフォルダを作成する必要があります。

```
$ mkdir -p fuel/app/tmp/Smarty/configs/
$ mkdir -p fuel/app/tmp/Smarty/templates_c/
```

## .gitignoreの除外条件を調整する。
configs, templates_cフォルダは空フォルダとして必要なので、各フォルダ内に「.gitkeep」ファイルを追加します。

```
$ touch fuel/app/tmp/Smarty/configs/.gitkeep
$ touch fuel/app/tmp/Smarty/templates_c/.gitkeep
```

ただし、実際作成される一時ファイルは、gitのコミット対象外としたいので、そのように条件を追加する。

```:.gitignore
/fuel/app/tmp/*
!/fuel/app/tmp/Smarty/configs/.gitkeep
!/fuel/app/tmp/Smarty/templates_c/.gitkeep
```

これで、fuel/app/tmp/フォルダがSmartyフォルダは除外してgit管理対象外となります。

## コントローラを作ってみる

```php:fuel/app/classes/controller/smarty.php
<?php

/**
 * Smartyサンプル
 *
 * @package  app
 * @extends  Controller
 */
class Controller_Smarty extends Controller
{
    /**
     * Smartyテンプレートのテスト
     *
     * @access  public
     * @return  Response
     */
    public function action_index()
    {
        return View_Smarty::forge('smarty/index.tpl', array('name' => 'hoge'));
    
}
```

## ビューを作成する
テストするため、viewsフォルダ内にテンプレートを作成してみる。

```smarty:fuel/app/views/smarty/index.tpl
<html>
<body>
{%$name%}
</body>
</html>
```
## テストしてみる
無事に表示されました。

```:www.example.com
hoge
```

以上です。

## 参考サイト

- [FuelPHP1.7.3のテンプレートエンジンにsmartyを設定](http://qiita.com/tageo/items/aa1193e45512a899c068)
- [FuelPHP1.7、Smartyと連携する](http://piyopiyocs.blog115.fc2.com/blog-entry-633.html)
- [【FuelPHP】parser.php の extensions 設定について](http://wakuworks.jugem.jp/?eid=178)