HTML (Twig v1)

HTML表示のためにcomposerでmadapaja/twig-moduleをインストールします。

composer require madapaja/twig-module ^1.0

次にhtmlコンテキストファイルsrc/Module/HtmlModule.phpを用意してTwigModuleをインストールします。

namespace MyVendor\MyPackage\Module;

use BEAR\AppMeta\AppMeta;
use Madapaja\TwigModule\TwigModule;
use Ray\Di\AbstractModule;

class HtmlModule extends AbstractModule
{
    protected function configure()
    {
        $this->install(new TwigModule);
    }
}

bin/page.phpのコンテキストを変更してhtmlを有効にします。

$context = 'cli-html-app';

リソースのPHPファイル名に.html.twig拡張子をつけたファイルでテンプレートを用意します。 Page/Index.phpに対応するのはPage/Index.html.twigになります。

<h1>{{ greeting }}</h1>

$bodyがテンプレートにアサインされて出力されます。

php bin/page.php get /
200 OK
content-type: text/html; charset=utf-8

<h1>Hello BEAR.Sunday</h1>

レイアウトや部分的なテンプレートファイルはvar/lib/twigに設置します。

カスタム設定

コンテンキストに応じてオプション等を設定したり、テンプレートのパスを追加したりする場合は @TwigPaths@TwigOptionsに設定値を束縛します。

namespace MyVendor\MyPackage\Module;

use Madapaja\TwigModule\Annotation\TwigOptions;
use Madapaja\TwigModule\Annotation\TwigPaths;
use Madapaja\TwigModule\TwigModule;
use Ray\Di\AbstractModule;

class AppModule extends AbstractModule
{
    protected function configure()
    {
        $this->install(new TwigModule());

        // twig テンプレートパスを追加
        $appDir = dirname(dirname(__DIR__));
        $paths = [
            $appDir . '/src/Resource',
            $appDir . '/var/lib/twig'
        ];
        $this->bind()->annotatedWith(TwigPaths::class)->toInstance($paths);

        // 環境のオプションを設定することも可能
        // @see http://twig.sensiolabs.org/doc/api.html#environment-options
        $options = [
            'debug' => false,
            'cache' => $appDir . '/tmp'
        ];
        $this->bind()->annotatedWith(TwigOptions::class)->toInstance($options);
    }
}

他のテンプレートエンジン

テンプレートエンジンは選択できるだけでなく、複数のテンプレートエンジンをリソース単位で選択することもできます。