Rumah > Soal Jawab > teks badan
P粉4642089372023-08-18 00:22:33
Apa yang anda perlukan ialah dipanggil pelanggan perkhidmatan
Dalam Symfony, apabila pengawal mewarisi AbstractController
, mereka adalah pelanggan perkhidmatan, yang bermaksud mereka disuntik ke dalam bekas kecil yang mengandungi beberapa perkhidmatan biasa (seperti ranting, penyeri bersiri, pembina borang, dll.).
Jika anda mahukan beberapa perkhidmatan "biasa" yang akan digunakan oleh pengawal anak anda, anda boleh melanjutkan senarai dengan mengatasinya getSubscribedServices()
dalam pengawal induk. Atau jika pengawal anda tidak mewarisi pengawal lalai yang disediakan oleh Symfony, anda hanya perlu melaksanakan pengawal anda sendiri:
Jika pengawal anda adalah perkhidmatan (saya rasa sudah ada), Symfony akan menggunakan suntikan setter untuk menyuntik bekas ke dalam pengawal anda.
Kod akan kelihatan seperti ini:
<?php use Symfony\Contracts\Service\ServiceSubscriberInterface; class ParentController implement ServiceSubscriberInterface { protected ContainerInterface $container; public function setContainer(ContainerInterface) { $this->container = $container; } public static function getSubscribedServices() { // 这是静态的,所以Symfony可以在不实例化控制器的情况下“看到”所需的服务。 // 在这里定义一些常见的服务,一个示例在Symfony的AbstractController中 } } class ChildController extends ParentController { // 使用自定义DI来为子控制器提供服务。 public function indexAction { // 你可以使用$this->container->get(...)来获取服务 } }