h19e_logo.png

プログラミングメモと、子供とのお出かけ記録
<< ポケモンカードゲーム ジムチャレンジに行ってきました | main | FuelPHP1.3 Auth simpleauth のログイン仕様 >>
スポンサーサイト

一定期間更新がないため広告を表示しています

| - | | - | - | pookmark |
FuelPHP1.3 + Twig のセットアップとエスケープ仕様
FuelPHPで、テンプレートパーサーにTwigを使用するための手順とエスケープの仕様をまとめました。

1. セットアップについて

FuelPHP で Twigを利用するのは、簡単でTwigをダウンロードして、
解凍してlib以下にあるTwigディレクトリを app/vendor  以下にコピーします。

そして、app/config/config.php の packages配列に parserを追加して、parserのパッケージを使用できるようにします。


    'always_load' => array(
         'packages' => array(
              //'orm',
              'parser',   //追加
          ),

これで、セットアップは完了です。

また、Twig本体を app以下ではなく、 packages/parser/vendor 以下に Twig を配置したい場合は、

packages/parser/config/parser.php の

 'View_Twig' => array(
    'include' => APPPATH.'vendor'.DS.'Twig'.DS.'Autoloader.php',

となっているところを、

 'View_Twig' => array(
   'include' => PKGPATH.'parser'.DS.'vendor'.DS.'Twig'.DS.'Autoloader.php',

に変更すればOKです。


次に使用方法ですが、

app/classes/controller 以下に配置してあるControllerのactionメソッド内の、

return Response::forge(View::forge('{ディレクトリパス}/{ファイル名}',$data));

になっているところを、

return Response::forge(View::forge('{ディレクトリパス}/{ファイル名}.twig',$data));

のように、ファイルの拡張子として、.twigを追加します。

また、拡張子を .html や、.tpl  などに変更したい場合は、

packages/parser/config/parser.php の

'extensions' => array(
    
    'twig' => 'View_Twig'

の部分を

'extensions' => array(

    'html' => 'View_Twig'

に変更することで変更できます。



2.エスケープについて


次に、この状態でのエスケープのデフォルトの仕様ですが、

・FuelPHP の auto_encode(自動エンコード) を使用する

・Twig の autoescape は 使用しない

となっています。

なので、タグをそのまま出力したい場合など
特に、Paginationクラスを使用して、

$data['pagination'] = Pagination::create_links();

return Response::forge(View::forge('{ディレクトリパス}/{ファイル名}.twig',$data));

の用に使用すると、ページング部分がエンコードされてしまってうまく表示されません。

この解決方法は何通りかあるのですが、1つめは


データをテンプレートに渡す際に、以下のような記述で渡します。

return Response::forge(View::forge('{ディレクトリパス}/{ファイル名}.twig',$data)
->set('pagination',Pagination::create_links(),false));

View::forgeで取得したインスタンスに、値を直接セットします。
その際の、第三引数がエスケープの仕様を制御するフラグで、この部分をfalseにすることでエスケープなしで出力されます。

$view = View::forge('{ディレクトリパス}/{ファイル名}.twig',$data);
$view->set('pagination',Pagination::create_links(),false);
return  Response::forge($view);

こんな感じでわけて記述してもOKです。エスケープしたくない値が複数ある場合はこっちのほうが見やすいですね。


で、2つめは FuelPHP のオートエンコードを無効にして、Twigのエスケープ機能を有効にする方法です。

設定は、 packages/parser/config/parser.php で変更できます。

'View_Twig' => array(
    'auto_encode' => true,

FuelPHPのエンコード制御部分を

'View_Twig' => array(
    'auto_encode' => false,

に変更して、

'View_Twig' => array(
    'environment' => array('
        'autoescape' => false,

Twigのエスケープ制御部分を

'View_Twig' => array(
    'environment' => array('
        'autoescape' => true,

に変更します。

この設定にしたのち、Twigのテンプレートファイルで、

{{ pagination|raw }} 

でエスケープを無効にして出力することが可能になります。


| プログラミングメモ | 12:48 | comments(0) | trackbacks(0) | pookmark |
スポンサーサイト
| - | 12:48 | - | - | pookmark |

コメント
コメントする









この記事のトラックバックURL
http://h19e.jugem.jp/trackback/74
トラックバック