Symfonyでコントローラを作成する方法を解説!アノテーションとYAMLでルート定義
生徒
「Symfonyでページを表示させるための仕組みって、どうやって作るんですか?」
先生
「Symfonyでは、コントローラというものを作って、その中でページごとの処理を書くんですよ。」
生徒
「それって難しいですか?何か特別な設定が必要ですか?」
先生
「いえいえ、大丈夫。初心者でも理解しやすいように、アノテーション方式とYAML方式の2つを紹介しますね!」
1. Symfonyのコントローラとは?
Symfony(シンフォニー)におけるコントローラとは、アクセスされたURLに応じて、処理の内容を決める役割を持つ「操作指示係」です。ウェブサイトで「お問い合わせページ」や「商品一覧ページ」などを表示するには、それぞれのページに対して処理を用意する必要があります。その処理をまとめたものがコントローラです。
「このURLが来たら、こういうページを表示しよう!」というように、Symfonyのルーティング機能と連携して働きます。
2. コントローラの基本的な作成手順
まずはSymfonyのプロジェクトの中にコントローラを作る必要があります。以下のコマンドを使うと、コントローラの雛形が自動で作られます。
php bin/console make:controller SampleController
これでsrc/Controller/SampleController.phpというファイルが作成され、同時にテンプレートファイルもtemplates/sample/index.html.twigに生成されます。
3. アノテーションによるルーティングの書き方
Symfonyでは、PHPのコード内に「アノテーション」というコメントのような記述を入れることで、URLとの関連付けを行うことができます。
たとえば、次のように書くと、「/hello」というURLにアクセスしたときにこの関数が呼び出されます。
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class HelloController extends AbstractController
{
#[Route('/hello', name: 'hello_route')]
public function hello(): Response
{
return new Response('こんにちは!Symfonyのコントローラへようこそ');
}
}
#[Route(...)]の部分がアノテーションです。「この関数は/helloというURLに対応するよ」という意味になります。nameはこのルートの識別名で、後でリンクを作るときに使います。
4. YAMLファイルでルーティングを設定する方法
もうひとつの方法が「YAML(ヤムル)ファイルによるルート定義」です。YAMLは、設定を記述するためのファイル形式のひとつで、人間にとって読みやすい構造になっています。
たとえば、次のようにconfig/routes.yamlにルートを書きます。
hello_route:
path: /hello
controller: App\Controller\HelloController::hello
この設定は、「/hello」というURLにアクセスが来たとき、HelloControllerのhello()という関数を実行する、という意味です。
5. どちらの方法を使うべき?
アノテーションは、コントローラのコードとルート設定が一緒になっていて、見た目にもわかりやすく、初心者には使いやすいです。YAML方式は、コードと設定を完全に分けて整理できるため、大規模なプロジェクトやチーム開発で便利です。
最初はアノテーションで慣れてから、YAMLの使い方を覚えていくのがよいでしょう。
6. Symfonyで使えるコントローラ命名ルールと構成
Symfonyでは、コントローラのファイル名は「〇〇Controller」という名前にする決まりがあります。例えば、「HelloController」「UserController」などです。
この命名ルールを守ることで、Symfonyが正しくクラスを見つけて処理してくれます。
また、コントローラはsrc/Controller/ディレクトリにまとめて入れるのが一般的です。これにより、管理しやすくなり、どこに何の処理があるのかが分かりやすくなります。
7. コントローラで画面を表示するには?
コントローラは、ただ文字を返すだけでなく、テンプレートというHTMLファイルを表示させる役割もあります。
次回の学習では、そのテンプレート(Twig)について紹介しますが、今回は一例として、下記のようにテンプレートを表示する方法だけ紹介します。
return $this->render('sample/index.html.twig');
これで、templates/sample/index.html.twigのファイルが表示されるようになります。
まとめ
Symfonyでコントローラを作成し、アノテーション方式とYAML方式によってルートを管理する流れは、Webアプリケーションを効率よく構築するための基礎としてとても重要な考え方です。今回の内容では、コントローラが持つ役割、基本的な作成手順、ルーティングの設定方法、そしてテンプレートを画面へ返す流れまでを順序立てて整理しました。特に、コントローラの命名規則やルートの指定方法を正しく理解することで、複雑な画面遷移やページ構成であっても、迷うことなく整理された状態で開発を進めることができます。 また、Symfonyにおけるアノテーション方式は、コードとルート設定を近い場所で管理できるという利点があり、初心者が構造をつかみやすい仕組みとなっています。一方、YAML方式は設定ファイルでまとめて管理できるため、複数メンバーで開発を行う場面や大規模アプリケーションでは非常に扱いやすい方法です。こうした複数の選択肢を状況に応じて使い分けられる点も、Symfonyの大きな特徴といえるでしょう。 さらに、コントローラからテンプレートを表示する仕組みは、実際の画面作成に欠かせない重要な工程であり、Twigテンプレートと連携することでより柔軟なページ表示が実現できます。これらを組み合わせていくことで、ページごとの表示処理や動的なデータ表示をより自然に進められるようになります。以下では、今回学んだ内容を振り返るため、簡単なサンプルプログラムを引用し、実際のコントローラ構成のイメージを再確認します。
サンプルプログラムでまとめるコントローラの流れ
アノテーション方式でルートを設定し、テンプレートを画面に返す流れを再確認しましょう。
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class SummaryHelloController extends AbstractController
{
#[Route('/summary/hello', name: 'summary_hello')]
public function hello(): Response
{
return $this->render('summary/hello.html.twig', [
'message' => 'まとめとしての確認:Symfonyのコントローラ表示'
]);
}
}
このように、アノテーションでURLとメソッドを結び付け、必要なテンプレートを返すという流れが自然に身についていきます。Symfonyの柔軟な構造は、初めての学習であっても直観的に理解しやすいため、段階を踏みながら習得できるのが魅力のひとつです。 アプリケーション開発が進むにつれ、コントローラの数も機能も増えていきますが、今回触れた命名ルールや構成を守ることで、プロジェクト全体を整理して見通し良く保つことができます。こうした考え方を実際の開発に活かすことで、より品質の高いWebアプリケーション構築につながっていくでしょう。
生徒
「コントローラって、ページごとの処理をまとめるための場所なんだって分かりました!」
先生
「その理解でばっちりですよ。URLと処理を結び付けるルーティングと組み合わせて使うのがポイントです。」
生徒
「アノテーションとYAML、両方に特徴があって、状況によって使い分ければいいんですね。」
先生
「ええ、最初はアノテーションから慣れていくのが自然ですが、設定をまとめたい場面ではYAMLがとても役立ちますよ。」
生徒
「テンプレートを表示する仕組みも理解できて、いよいよWebアプリっぽい動きが作れそうです!」
先生
「次回はTwigを使ってもっと見やすいページを作る方法を学びましょう。今回の理解が今後につながりますよ。」