本記事は以下の環境で動作確認します。
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 |