Symfonyのアーキテクチャ復習

今朝は、以前ブログでもまとめた、Symfonyについてお話しされているせお丸さんの動画をみて復習しました。

【Symfonyで使われている技術】
・ModelではDoctrineというモジュールを使用
・ViewではTwigと呼ばれるフレームワーク

【シングルトン】
・何度呼び出しても同じインスタンスを返すことが保証されている

【DIコンテナ】
・サービス(便利なクラス)を登録しておく場所
・シングルトンで取り出される
・最初から便利なサービスが用意されている(LoggerやEntityManager[データベースアクセス時使用])
・自作のサービスクラスを登録することも可能

DIコンテナ(便利なサービスクラスを格納しておくためのコンテナ)
 └ Loggerクラス
 └ HttpClientクラス
 └ SlackClientクラス
 └ PaymentServiceクラス

Controller(呼び出し側)からは、DIコンテナ経由でサービスクラスを呼び出す
Controllerとは別のロジッククラス(呼び出し側)からも呼び出せる

こうやって呼び出すとき、何度呼び出しても同じインスタンスが返ってくる。

【DIコンテナからサービスを呼び出す】
Symfonyからクラスを呼び出すときはServiceIDを使う
例:Loggerクラスを呼び出したいとき ServiceID:logger
$logger = $container->get(‘logger’)

例:EntityManagerクラスを呼び出したいとき ServiceID:doctrine.orm.entity_manager
$entityManager = $container->get(‘doctrine.orm.entity_manager’)

※$containerについて。
Controllerの場合は、$this->container

【DIコンテナへサービスを登録】
・service.ymlで登録
・ymlの他に、xmlやphpファイル形式も可

※ここまでは、バージョン2までの時代の話※

【5系】
☆Controllerの引数にloggerを定義するだけで、自動的にDIコンテナがサービスを差し込んでくれる。
例:(2系) $logger = $this->container->get(‘logger’);
例:(5系) public function list(LoggerInterface $logger): Response{…}

☆DIコンテナでサービスの定義は不要。自動で登録される
2系では、services.ymlファイルなどに定義していた。
※ここまで。。。この続きは勉強再開したときに更新します。

この記事を書いた人