SilexのTwigServiceProviderを使ってTwigを利用する。

Twigのインストール

slim版にはTwig自体が含まれていないので、composerを使ってTwigをインストールする。

composer.jsonを

{
    "require": {
        "silex/silex": "~1.1",
        "twig/twig": ">=1.8,<2.0-dev"
    }
}

のように編集して、composer.pharを実行する。

$ ./composer.phar update

Service Providerの登録

SilexApplicationregisterメソッドで登録する。

$app->register(new SilexProviderTwigServiceProvider(), array(
    twig.path => __DIR__./../views,
));

twig.pathはTwigファイルを管理するディレクトリ。

テンプレートのレンダリング

$app[twig]にService Providerが登録されており、renderメソッドで対象テンプレートを指定してテンプレートをレンダリングする。

// web/index.php
$app->get(/sample04-01, function(Application $app) {
    return $app[twig]->render(04/sample04-01.twig, array(name => Silex!!));
});

テンプレートの配置先はService Providerのパス+renderメソッドで指定したパスのところ。

<!-- views/04/sample04-01.twig -->
Hello {{name}}

テンプレートでUrlGeneratorServiceProviderを使う

composerを使ってsymfony/twig-bridgeをインストールしておくと、Twigの テンプレートでUrlGeneratorServiceProviderを利用することができる。

Twigのインストールと同様に、composer.jsonを

{
    "require": {
        "silex/silex": "~1.1",
        "twig/twig": ">=1.8,<2.0-dev",
        "symfony/twig-bridge": "~2.3"
    }
}

のように編集して、composer.pharを実行する。

$ ./composer.phar update

パッケージをインストールすると、テンプレートでpath関数とurl関数が使えるようになる。

// web/index.php
$app->get(/sample04-02, function(Application $app) {
    return $app[twig]->render(04/sample04-02.twig);
})
->bind(sample04-02);

<!-- views/04/sample04-02.twig -->
<ul>
<li>{{path(sample04-02)}}</li>
<li>{{path(sample04-02, {name: "Silex"})}}</li>
</ul>
<ul>
<li>{{url(sample04-02)}}</li>
<li>{{url(sample04-02, {name: "Silex"})}}</li>
</ul>

参考

  • TwigServiceProvider - Documentation - Silex - The PHP micro-framework based on Symfony2 Components
  • UrlGeneratorServiceProvider - Documentation - Silex - The PHP micro-framework based on Symfony2 Components

関連

  • Silexを試してみた(1) - きっかけとインストール - 作業ノート
  • Silexを試してみた(2) - 基本的なこと - 作業ノート
  • Silexを試してみた(3) - URLを生成する - 作業ノート
  • Silexを試してみた(4) - Twig - 作業ノート
  • Silexを試してみた(5) - Logging - 作業ノート
  • Silexを試してみた(6) - Doctrine DBAL - 作業ノート
  • Silexを試してみた(7) - その他と雑感 - 作業ノート