LoginSignup
6
6

More than 5 years have passed since last update.

Aura.Framework_Project で Twig を使う

Last updated at Posted at 2015-04-17

Aura で果たしてそもそも Framework_Project がどれくらい使われてるのか知らないけど、この Aura.Framework_Project ってのは、まあ要するに、Web_Kernel と Cli_Kernel を使った Project_Kernel が Router 設定したり Dispatcher したりしてとりあえずアプリが動きます、っていう Project のひな形を作ってくれるやつです。

はじめに、の章で Framework Project 使ってるからこれが Aura 的なスタンダードなのかなーと思って進めると、以後のサンプルでは一切出てきません (死

ま、ともかくひな形ができちゃえばあとはわりと簡単に Hello Wordl! まで動かすことはできるんですが、少しずつ色々変更したくなってきます。

てことで Twig を使う

サンプルとかではマイクロフレームワークを使う系の話がよくでてくるけど、文字列で HTML 組み立てていくのはさすがに使いやすそうにない感じなのでとりあえず View は おなじみの Twig を使いたい気持ちになるよね、ということでそれを組み込んでみます。

まずは composer でインストールしておきます。

$ composer require "twig/twig:~1.0"

DI で Twig を設定する

DI の設定は config/Common.php あたりでします。

<?php

namespace Aura\Framework_Project\_Config;

use Aura\Di\Config;
use Aura\Di\Container;

class Common extends Config
{
    public function define(Container $di)
    {
        ...

        $di->set('twig', $di->lazyNew('Twig_Environment', [
            'loader' => $di->lazyNew('Twig_Loader_Filesystem', [
                'paths' => dirname(__DIR__) . '/templates',
            ]),
            'options' => [
                'cache' => dirname(__DIR__) . '/tmp/cache/templates',
            ]
        ]));

        ...
    }

    ...
}

プロジェクトのルートディレクトリを取るのは本当は $di->get('project')->getPath() とかが良いんでしょうか。

使う

だいたいこんなかんじで。
ディスパッチャに設定している hello というオブジェクトは、Framework_Project で生成したひな形で最初から書いてあるやつです。$twig->render() の結果を $response->content にセットします。

$dispatcher->setObject('hello', function () use ($di) {
    $response = $di->get('aura/web-kernel:response');
    $twig = $di->get('twig');
    $response->content->set(
         $twig->render('hello.html.twig', ['name' => 'aoi san!'])
    );
});

まぁそんなかんじでだいたい動く

うごくんだけど、

  • 毎回 $response$twig を get してきて使うってのは面倒極まりないので、そこはとりあえずよしなにやってくれるメソッドをはやして処理
  • とかやるとマイクロフレームワークスタイルでの使い方っていうよりフルスタック型の使い方に近くなるのだけど。
6
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6