LoginSignup
0
0

More than 1 year has passed since last update.

symfony プロジェクトに新しく controller を定義する(routingとviewも併せて)

Posted at

本記事は以下の環境で動作確認します。

OS: macOS Venture 13.3.1
Chip: Apple M1 Pro

前提として、symfony アプリケーションは構築済み。: version 5.4

controllerの定義ついでに、以下も行います。

  • routing定義をannotationでおこなう。
  • viewをtwigというテンプレートエンジンで描画。

controller の定義

公式ドキュメントに沿って、以下コントローラを定義: src/Controller/LuckyController.php

namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;

class LuckyController
{
    public function number(): Response
    {
        $number = random_int(0, 100);

        return new Response(
            '<html><body>Lucky number: '.$number.'</body></html>'
        );
    }
}

viewをtwigで定義

レスポンスオブジェクトをそのまま返却ではなく、twigテンプレートエンジンで描画して返却するよう修正。

公式ドキュメント に沿ってtwigのインストール

symfony composer require twig

twigでレンダリングするためには、AbstractControllerを継承する必要があるのでその修正も実施。

namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;
+ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

- class LuckyController
+ class LuckyController extends AbstractController
{
    public function number(): Response
    {
        $number = random_int(0, 100);

-        return new Response(
-            '<html><body>Lucky number: '.$number.'</body></html>'
-        );

+        return $this->render('lucky/number.html.twig', [
+            'number' => $number,
+        ]);
    }
}

twigファイルを作成。: templates/lucky/number.html.twig

<h1>Your lucky number is {{ number }}</h1>

routingをannotationで定義

通常であればyamlファイルで定義するところ、annotation(注釈)で各アクションに対するルーティング定義ができるのでそちらを採用。

公式ドキュメントに沿って、doctrine/annotationsをインストール。

symfony composer require doctrine/annotations

annotationを追記。

namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;
+ use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class LuckyController extends AbstractController
{
+    /**
+     * @Route("/lucky/number", name="app_lucky_number")
+     */
    public function number(): Response
    {
        $number = random_int(0, 100);

        return $this->render('lucky/number.html.twig', [
            'number' => $number,
        ]);
    }
}

動作確認

symfony php bin/console debug:router app_lucky_number
Property Value
Route Name app_lucky_number
Path /lucky/number

https://127.0.0.1:8000/lucky/number

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0