カテゴリ: Symfony 更新日: 2026/02/19

Twigでルーティングとリンクを簡単表示(path関数)!初心者向けSymfonyテンプレート講座

Twigでルーティングとリンクを表示する方法(path関数)
Twigでルーティングとリンクを表示する方法(path関数)

先生と生徒の会話形式で理解しよう

生徒

「Twigテンプレートで、他のページにリンクを貼るにはどうすればいいですか?」

先生

「Twigでは、Symfonyのルーティング情報を使って簡単にリンクが作れるんですよ。」

生徒

「ルーティング情報ってなんですか?リンクにどう関係するんですか?」

先生

「とてもいい疑問ですね!では、Twigのpath関数を使ったリンクの作り方を、やさしく解説していきますね。」

1. Twigとは?テンプレートエンジンの基本

1. Twigとは?テンプレートエンジンの基本
1. Twigとは?テンプレートエンジンの基本

Symfony(サンフォニー)で標準採用されているTwig(トゥイッグ)は、PHPで効率的にWebサイトを作るためのテンプレートエンジンです。テンプレートエンジンとは、一言で言えば「HTML(見た目)」と「PHP(データ処理)」を切り離して管理するためのツールです。

プログラミング未経験の方でも、HTMLに近い感覚で直感的にコードを書けるのが大きな特徴です。まずは、一般的なPHPの書き方と、Twigを使った書き方の違いを簡単なサンプルで比較してみましょう。

【従来のPHPでの書き方】

HTMLの中にPHPのコードが混ざるため、少し複雑に見えます。


<p>こんにちは、<?php echo $user_name; ?>さん!</p>
<?php if ($point > 100): ?>
    <p>お得なクーポンがあります!</p>
<?php endif; ?>

【Twigでの書き方】

{{ }}{% %}という専用の記号を使うことで、驚くほどスッキリと記述できます。


<p>こんにちは、{{ user_name }}さん!</p>
{% if point > 100 %}
    <p>お得なクーポンがあります!</p>
{% endif %}

このようにTwigを使うことで、コードの可読性が格段に上がり、プログラムのロジックとデザインをきれいに分離できます。その結果、開発スピードが向上するだけでなく、後から修正が必要になった際も「どこを直せばいいか」が分かりやすくなり、保守性の高いWebアプリケーションを構築できるのです。

2. Twigでリンクを作るには?

2. Twigでリンクを作るには?
2. Twigでリンクを作るには?

HTMLでリンクを作るときは、通常は以下のように<a href="...">タグを使いますよね。


<a href="/contact">お問い合わせ</a>

しかし、Symfonyのアプリでは、ルーティングによってページのURLが自動的に決まる仕組みになっているので、URLを直接書くと管理が大変になります。

そこで登場するのが、Twigのpath関数です。

3. path関数とは?リンク生成の便利ツール

3. path関数とは?リンク生成の便利ツール
3. path関数とは?リンク生成の便利ツール

path関数は、Symfonyで定義されたルート名(ルーティング名)をもとに、正しいURLを自動で出力してくれるTwigの関数です。

ルート名とは、Symfonyのコントローラで設定したURLの名前のことです。たとえば、下記のようにコントローラで指定します。


#[Route('/about', name: 'about_page')]
public function about(): Response
{
    return $this->render('page/about.html.twig');
}

この場合、about_pageというルート名が使えます。

そしてTwigテンプレートでは、以下のようにリンクを書きます。


<a href="{{ path('about_page') }}">このサイトについて</a>

このようにすることで、Symfonyが正しいURL(例:/about)を自動で差し込んでくれます。

4. 実際の使用例を見てみよう

4. 実際の使用例を見てみよう
4. 実際の使用例を見てみよう

例えば、ナビゲーションバー(メニュー)を作るときに、次のように書けます。


<nav>
    <ul>
        <li><a href="{{ path('home') }}">ホーム</a></li>
        <li><a href="{{ path('about_page') }}">このサイトについて</a></li>
        <li><a href="{{ path('contact') }}">お問い合わせ</a></li>
    </ul>
</nav>

このようにすれば、URL構造が変わってもTwigが最新のルートに合わせてリンクを生成してくれるので、とても安心ですね。

5. パラメータ付きURLの作り方

5. パラメータ付きURLの作り方
5. パラメータ付きURLの作り方

ページによっては、IDなどのパラメータ(変数のようなもの)をURLに含めたいこともありますよね。たとえば、記事の詳細ページなどです。

ルートが次のように定義されているとします。


#[Route('/blog/{id}', name: 'blog_detail')]
public function detail(int $id): Response
{
    //...
}

このルートをTwigでリンクにするには、次のようにパラメータを渡します。


<a href="{{ path('blog_detail', { 'id': post.id }) }}">続きを読む</a>

この例では、post.idという変数に記事のIDが入っていることを想定しています。

6. よくある間違いとその対処法

6. よくある間違いとその対処法
6. よくある間違いとその対処法

Twigのpath関数でよくある間違いは、次のようなものです。

  • ルート名が間違っている(正確な名前を確認しましょう)
  • パラメータが足りない(指定が必要な場合は必ず渡す)
  • ルート自体が定義されていない(コントローラで定義されているか確認)

リンクが正しく動かない場合は、まずはルーティング設定とルート名を見直してみましょう。

7. SymfonyとTwigでルートの管理が楽になる理由

7. SymfonyとTwigでルートの管理が楽になる理由
7. SymfonyとTwigでルートの管理が楽になる理由

SymfonyとTwigを組み合わせることで、リンクの管理がとても楽になります。特に、以下の点でメリットがあります。

  • URLを直接書かなくていいので、メンテナンスが簡単
  • ルーティングと連携して安全にリンクを生成できる
  • 可読性が高く初心者にも分かりやすい

このように、Twigのpath関数を使うだけで、プロっぽいリンク作成ができるようになりますよ!

まとめ

まとめ
まとめ

Symfony開発におけるフロントエンドの実装において、Twigテンプレートエンジンの活用は欠かせません。その中でも今回学習したpath関数は、ルーティングとビューを繋ぐ極めて重要な役割を担っています。従来のHTML制作のようにURLを直書き(ハードコーディング)してしまうと、将来的にサイトのディレクトリ構造が変わった際、全てのリンクを手作業で修正しなければならず、バグやリンク切れの原因となります。しかし、Symfonyのルート名を用いたリンク生成を徹底することで、保守性の高い、堅牢なシステムを構築することが可能になります。

Twigのpath関数を使いこなすポイント

path関数を実務で使う際には、単にURLを出力するだけでなく、動的なパラメータの受け渡しや、ルーティングの柔軟性を理解しておくことが重要です。例えば、ブログシステムやECサイトを構築する場合、各記事や商品には固有のIDが割り振られます。これらをリンクに反映させるには、path関数の第二引数に連想配列形式で値を渡す必要があります。

ここで、実際にパラメータを複数持たせる場合のサンプルプログラムを見てみましょう。例えば、カテゴリーと記事IDの両方をURLに含めるルーティング設定がある場合を想定します。


// コントローラー側でのルーティング定義例
#[Route('/archive/{category}/{id}', name: 'archive_detail')]
public function archiveDetail(string $category, int $id): Response
{
    // 指定されたカテゴリーとIDに基づいた処理
    return $this->render('archive/detail.html.twig', [
        'category' => $category,
        'post_id' => $id
    ]);
}

上記のルーティングに対し、Twig側では次のように記述することで、安全にリンクを生成できます。


{# 複数のパラメータをpath関数で渡す書き方 #}
<a href="{{ path('archive_detail', { 'category': 'tech', 'id': 123 }) }}" class="btn btn-primary">
    記事の詳細を見る
</a>

このコードが実行されると、実際のブラウザ上でのHTML出力は以下のようになります。


<a href="/archive/tech/123" class="btn btn-primary">
    記事の詳細を見る
</a>

このように、path関数はバックエンドの設定とフロントエンドの表示をスマートに同期させてくれます。

応用:クエリパラメータの追加

また、ルーティングで定義されていない変数をpath関数の第二引数に含めると、自動的にクエリ文字列(?name=value)としてURLに付与されるという便利な仕様もあります。検索結果ページや、フィルタリング機能を作るときに重宝しますね。


{# ルート定義にない変数を渡すとクエリパラメータになる #}
<a href="{{ path('home', { 'search': 'php', 'page': 2 }) }}">
    検索結果の2ページ目へ
</a>

この場合の実行結果(出力されるHTML)は以下の通りです。


<a href="/?search=php&page=2">
    検索結果の2ページ目へ
</a>

Symfonyでのウェブアプリケーション開発は、こうした「ちょっとした便利機能」をいかに組み合わせていくかが鍵となります。Twigの基本をマスターすることで、テンプレートの記述量は減り、逆にできることは飛躍的に増えていくはずです。

デバッグのコツ

もし「RouteNotFoundException」といったエラーが出てしまったら、まずはターミナル(コマンドプロンプト)を開いて、現在のプロジェクトに登録されているルートの一覧を確認してみましょう。


php bin/console debug:router

このコマンドを叩くことで、自分が設定した「名前(Name)」が正しいか、どのような「パス(Path)」が割り当てられているかを一目で確認できます。大文字・小文字のミスや、アンダースコアの有無などは非常によくある間違いですので、困ったときはこのコマンドに頼るのがプロの開発者への第一歩です。

先生と生徒の振り返り会話

生徒

「先生、まとめを読んでpath関数のすごさがもっと分かりました!単にURLを作るだけじゃなくて、パラメータを自由に操れるのが面白いですね。」

先生

「その通りです。特に、将来的にURLの形式を /blog/123 から /article/123 に変えたくなったとしても、コントローラーのRoute設定を1箇所変えるだけで、サイト全体のリンクが自動で切り替わるんですよ。」

生徒

「それはすごい助かります!昔、静的なHTMLでサイトを作っていたときは、1つずつ手作業で直していて本当に大変でした……。」

先生

「そうですよね。それがフレームワークを使う大きなメリットの一つなんです。あと、クエリパラメータの話もしましたが、検索機能とかページネーションを実装するときに必ず使うので、今のうちに感覚を掴んでおくと後が楽になりますよ。」

生徒

「わかりました!あ、そういえばルート名を確認するコマンドも教えてもらいましたが、あれは開発中によく使いますか?」

先生

「もちろんです。プロジェクトが大きくなってページ数が数百を超えてくると、どのルート名が何だったか覚えきれなくなりますからね。debug:routerは、Symfonyエンジニアにとっての地図のようなものです。」

生徒

「地図ですか、かっこいい!まずは基本のpath関数をマスターして、パラメータ付きの複雑なリンクもスラスラ書けるように練習してみます!」

先生

「その意気です。Twigには他にも便利な機能がたくさんあるので、一つずつ楽しみながら覚えていきましょうね。」

関連記事:
カテゴリの一覧へ
新着記事
New1
Laravel
Laravelのコントローラでリクエストをログ出力する方法を初心者向けに解説
New2
Laravel
Laravelでモデルからデータを取得・保存・更新・削除する方法を完全ガイド!初心者でもわかるEloquent ORM入門
New3
Symfony
Symfonyのセッション管理完全ガイド!初心者でもわかるセッションドライバ設定(file・Redis)
New4
Laravel
Laravelのエラーメッセージをカスタマイズする方法|初心者向けガイド
人気記事
No.1
Java&Spring記事人気No1
Laravel
LaravelでBasic認証を実装するミドルウェアの使い方!初心者向けガイド
No.2
Java&Spring記事人気No2
Symfony
SymfonyでTwigテンプレートを表示する方法を完全ガイド!初心者にもわかるHTMLとの違いや使い方
No.3
Java&Spring記事人気No3
Laravel
Laravelでモデルからデータを取得・保存・更新・削除する方法を完全ガイド!初心者でもわかるEloquent ORM入門
No.4
Java&Spring記事人気No4
Laravel
Laravelのデータベース設定方法を完全ガイド!初心者でもわかる.envファイルの使い方
No.5
Java&Spring記事人気No5
Laravel
LaravelでファクトリとSeederを組み合わせてダミーデータを生成する方法!初心者でも簡単にテストデータ作成
No.6
Java&Spring記事人気No6
Symfony
Symfonyのコントローラでリダイレクトする方法を徹底解説!初心者にもやさしく解説
No.7
Java&Spring記事人気No7
Symfony
Symfonyでメモリキャッシュ(APCu)を活用する方法を初心者向けに完全解説
No.8
Java&Spring記事人気No8
Laravel
Laravelのインストール方法まとめ!ComposerとLaravel Installerの使い方