フレームワークPhalconのViewにVoltを使ってみる


前回の続きです。
チュートリアルのViewでは以下の通り、生のPHPで書かれています。

<?php

echo "<h1>Hello!</h1>";

echo Phalcon\Tag::linkTo("signup", "Sign Up Here!");

出力されるHTMLは以下の通り。

<h1>Hello!</h1><a href="/public/signup">Sign Up Here!</a>

大方の人が期待した通りに出力されていると思います。

ではPhalconで使えるVoltテンプレートを使うように変更してみます。
/public/index.phpを修正します。

<?php

    //Setting up the view component
    $di->set('view', function(){
        $view = new \Phalcon\Mvc\View();
        $view->setViewsDir('../app/views/');
        // .voltファイルをVoltエンジンでレンダリングするよう登録
        $view->registerEngines(array(
            ".volt" => 'Phalcon\Mvc\View\Engine\Volt'
        ));
        return $view;
    });

次にView側です。
/app/views/index/index.voltを作成します。

<h1>Hello!</h1>
{{ link_to('signup', 'Sign Up Here!') }}

ここで出てくるlink_to()はPhalcon\Tag::linkTo();と同義です。
他に使えるメソッドは公式ドキュメントにタグヘルパーとして記載されています。

また、Voltファイルには、通常のPHPを混在させる事もできるので、以下の様な書き方も可能です。

<h1>Hello!</h1>
{{ link_to('signup', 'Sign Up Here!') }}
<?php
echo Phalcon\Tag::linkTo("signup", "Sign Up Here!");
?>

Voltの書き方が分からなくても何とかなりますね。

この状態で一度ページにアクセスすると、同じ階層にindex.volt.phpというファイルができています。.voltファイルを.phpに変換したもののようで、以下のような内容になっています。

<h1>Hello!</h1>
<?php echo Phalcon\Tag::linkTo(array('signup', 'Sign Up Here!')); ?>
<?php
echo Phalcon\Tag::linkTo("signup", "Sign Up Here!");
?>


ついでですが、Vimでの.voltファイルのシンタックスハイライトはhtmldjangoが近そうです。

:set filetype=htmldjango

とするか、.vimrcで

au! BufNewFile,BufRead *.volt set filetype=htmldjango

としておけば良さそうです。