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 してきて使うってのは面倒極まりないので、そこはとりあえずよしなにやってくれるメソッドをはやして処理 - とかやるとマイクロフレームワークスタイルでの使い方っていうよりフルスタック型の使い方に近くなるのだけど。