中野's workspace

  • Profile
  • Privacy
  • Contact

2019/10/01

SymfonyとTwigを連携する

  • #PHP
  • #Symfony
  • #Twig

目次

TwigとはPHP製のテンプレートエンジンです。

公式サイトによると、TwigはFast、Secure、Flexibleといった特徴を持つようです。

少し見てみただけですが、直感的かつ柔軟に組めそうな印象を受けました。

SymfonyではテンプレートエンジンとしてTwigを採用しています。

今回はSymfonyとTwigの連携方法について学んだので紹介していきます。

Symfonyのバージョンは4.3です。

Twigの準備

まずはTwigを使用するために以下のコマンドを実行してください

composer require twig

無事コマンドが成功すると、templatesディレクトリとconfig\packages\twig.yamlが作成されているのがわかると思います。

templatesディレクトリにはTwigファイルを置きます。

config\packages\twig.yamlはTwigの基本的な設定値が記述されています。

twig.yaml
twig:
    default_path: '%kernel.project_dir%/templates'
    debug: '%kernel.debug%'
    strict_variables: '%kernel.debug%'

yaml内にあるdefault_pathの値を変更することで、Twigファイルを置くディレクトリ構成を変更することが出来ます。

ControllerとTwigの連携を行う

Symfonyルーティングの仕組みで触れた通り、リクエストを受けレスポンスを返すControllerのコードは以下のようになります。

TestController.php
<?php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
class TestController
{
    public function test()
    {
        return new Response('testメソッドが実行されました');
    }
}

これをTwigと連携させてみましょう。

Twigと連携するために、AbstractControllerを継承してください。

AbstractControllerを継承することによって、$this->render();という、Twigを表示するためのメソッドが利用できるようになります。

また、今回は表示するためのTwigファイルはtemplates\views\test.html.twigとし、Controllerからtestという値を受け取って表示するようにします。

TestController.php
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
class TestController extends AbstractController
{
    /**
     * @Route("/")
     */
    public function test()
    {
        return $this->render('views/test.html.twig', [
            'test' => 'これはテストです',
        ]);
    }
}
test.html.twig
<h1>{{ test }}</h1>

ここまで出来たらサーバを起動し、画面が以下の表示されることが確認できると思います。

テストページ表示

このように簡単にSymfonyからTwigを利用できるようになっているので、是非トライしてみてください。

このエントリーをはてなブックマークに追加