Symfonyのrenderメソッドを完全解説!Twigに変数を渡す方法を初心者向けに丁寧に解説
生徒
「Twigにデータを渡して表示したいんですけど、どうすればいいですか?」
先生
「Symfonyでは、コントローラの中でrenderメソッドを使ってTwigに変数を渡すことができますよ。」
生徒
「renderメソッドって初めて聞きました。初心者でも簡単に使えますか?」
先生
「もちろんです!では、具体的にどうやって使うのか順番に説明していきましょう。」
1. TwigとSymfonyの連携とは?
Symfony(サンフォニー)は、Twig(トゥイッグ)というテンプレートエンジンを使ってHTMLの画面を表示します。ただし、HTMLだけではデータを表示できません。コントローラ側からデータを渡して、それをTwigで受け取る必要があります。
このとき使うのが、renderメソッドです。renderとは「描画する」という意味で、テンプレートを表示するために使うSymfonyのメソッドです。
2. renderメソッドの基本的な使い方
Symfonyでは、コントローラクラスの中でrenderメソッドを使うことで、Twigのテンプレートを読み込み、そこに変数を渡すことができます。以下は基本の書き方です。
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class HelloController extends AbstractController
{
#[Route('/hello', name: 'hello')]
public function index(): Response
{
$name = '太郎';
return $this->render('hello/index.html.twig', [
'name' => $name,
]);
}
}
この例では、$nameという変数に「太郎」という文字列を入れて、Twigのhello/index.html.twigにnameという名前で渡しています。
3. Twig側で変数を受け取って表示する
先ほどコントローラから渡されたname変数は、Twigテンプレート内で簡単に表示できます。次のように記述します。
<h1>こんにちは、{{ name }}さん!</h1>
{{ }}で囲むことで、変数の中身が表示されます。PHPのechoのような役割ですね。
4. 複数の変数をTwigに渡すには?
renderメソッドでは、複数の変数も同時に渡すことができます。配列の形でキーと値をセットにして指定します。
return $this->render('hello/index.html.twig', [
'name' => '太郎',
'age' => 30,
'city' => '東京',
]);
これにより、Twigでは{{ name }}や{{ age }}、{{ city }}として使用できます。
5. 実行結果のイメージ
<h1>こんにちは、太郎さん!</h1>
<p>年齢:30歳</p>
<p>住所:東京</p>
このように、PHPで持っているデータをTwigに渡すことで、動的な画面表示が可能になります。
6. 配列やリストをTwigに渡す方法
配列やリストのような複数データもTwigに渡すことができます。例えば、好きな食べ物の一覧を表示したいときは以下のように書きます。
$foods = ['りんご', 'バナナ', 'カレー'];
return $this->render('hello/foods.html.twig', [
'foods' => $foods,
]);
<ul>
{% for food in foods %}
<li>{{ food }}</li>
{% endfor %}
</ul>
これでTwig上に一覧表示されます。SymfonyとTwigの連携で、リストデータの表示もスムーズです。
7. Twigに連想配列を渡すときの注意点
連想配列とは「キー:値」の形で情報をまとめたデータです。Twigではこのキーを使って値にアクセスできます。
$user = [
'名前' => '山田花子',
'年齢' => 28,
'住所' => '大阪府'
];
return $this->render('user/profile.html.twig', [
'user' => $user,
]);
<p>{{ user['名前'] }}</p>
<p>{{ user['年齢'] }}歳</p>
<p>{{ user['住所'] }}</p>
キーに日本語を使う場合、角カッコ([])でアクセスするのが確実です。
8. Twigで変数が渡っていないときの対処法
コントローラから変数が渡されていないと、Twigでエラーになることがあります。そのときは、defaultフィルターを使うと安全です。
<p>{{ name|default('ゲスト') }}さん、こんにちは!</p>
このように書くと、nameが存在しないときでも「ゲストさん」と表示され、エラーを防ぐことができます。