今朝は、以前ブログでもまとめた、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ファイルなどに定義していた。
※ここまで。。。この続きは勉強再開したときに更新します。