ฉันใช้วิธีฉีดบริการนี้ไปยังตัวควบคุมเสมอ:
<?php
เนมสเปซ Drupal\TestModule\Controller;
ใช้ Drupal\Core\Controller\ControllerBase;
ใช้ Symfony\Component\DependencyInjection\ContainerInterface;
คลาส TestModuleController ขยาย ControllerBase {
ป้องกัน $testModule;
ฟังก์ชั่นสาธารณะ __construct (TestModule $testModule) {
$this->testModule = $testModule;
}
สร้างฟังก์ชันคงที่สาธารณะ (ContainerInterface $container) {
ส่งคืนค่าคงที่ใหม่ (
$container->get('testModule.service')
);
}
ฟังก์ชั่นสาธารณะ testModule () {
กลับ [
'#type' => 'มาร์กอัป',
'#markup' => $this->testModule->getTestModule(),
];
}
}
แต่ด้วย drupal console ฉันสร้าง Controller พร้อมบริการ (คำสั่ง drupal gcon) และรับรหัสอื่น:
<?php
เนมสเปซ Drupal\TestModule\Controller;
ใช้ Drupal\Core\Controller\ControllerBase;
ใช้ Symfony\Component\DependencyInjection\ContainerInterface;
คลาส TestModuleController ขยาย ControllerBase {
ป้องกัน $testModule;
สร้างฟังก์ชันคงที่สาธารณะ (ContainerInterface $container) {
$instance = parent::create($คอนเทนเนอร์);
$instance->testModule = $container->get('testModule.service');
ส่งคืนอินสแตนซ์ $;
}
ฟังก์ชั่นสาธารณะ testModule () {
กลับ [
'#type' => 'มาร์กอัป',
'#markup' => $this->testModule->getTestModule(),
];
}
}
วิธีที่สองนี้ดีกว่าวิธีแรก และฉันควรใช้วิธีใด