Điểm:3

Cách nào tốt hơn để đưa dịch vụ vào bộ điều khiển bằng __construct hoặc $instance = parent::create($container)

lá cờ ru

Tôi luôn sử dụng cách tiêm dịch vụ này cho bộ điều khiển:

<?php    
không gian tên Drupal\TestModule\Controller;
    
    sử dụng Drupal\Core\Controller\ControllerBase;
    sử dụng Symfony\Component\DependencyInjection\ContainerInterface;
    
    lớp TestModuleController mở rộng ControllerBase {
    
      $testModule được bảo vệ;
    
        hàm công khai __construct(TestModule $testModule) {
        $this->testModule = $testModule;
      }
    
      tạo hàm tĩnh công khai (ContainerInterface $container) {
        trả về tĩnh mới (
          $container->get('testModule.service')
        );
      }
    
      hàm công khai testModule() {
        trở lại [
          '#type' => 'đánh dấu',
          '#markup' => $this->testModule->getTestModule(),
        ];
      }
    }

Nhưng với bảng điều khiển drupal, tôi tạo Trình điều khiển bằng dịch vụ (lệnh gcon drupal) và nhận mã khác:

<?php
    không gian tên Drupal\TestModule\Controller;
    
    sử dụng Drupal\Core\Controller\ControllerBase;
    sử dụng Symfony\Component\DependencyInjection\ContainerInterface;
    
    lớp TestModuleController mở rộng ControllerBase {
    
      $testModule được bảo vệ;
    
      tạo hàm tĩnh công khai (ContainerInterface $container) {
        $instance = parent::create($container);
        $instance->testModule = $container->get('testModule.service');
        trả lại cá thể $;
      }
    
      hàm công khai testModule() {
        trở lại [
          '#type' => 'đánh dấu',
          '#markup' => $this->testModule->getTestModule(),
        ];
      }
    }

Cách thứ hai này có tốt hơn cách thứ nhất không và tôi nên sử dụng cách nào?

Điểm:3
lá cờ ru

TL;DR: Cách thứ hai tốt hơn.

Phương thức xây dựng __xây dựng() được coi là nội bộ, bạn không thể (tiết kiệm) ghi đè lên nó. Ví dụ. số lượng hoặc loại tham số chức năng bắt buộc có thể thay đổi. Do đó, mã của phiên bản đầu tiên có thể hòa vốn trong một bản cập nhật nhỏ của lõi Drupal. Chỉ phiên bản thứ hai được đảm bảo hoạt động ít nhất cho đến khi phát hành phiên bản chính tiếp theo.

Để biết thêm thông tin, tôi khuyên bạn nên đọc cái này Thay đổi bản ghi từ mô-đun Webform.

leymannx avatar
lá cờ ne
Ah yeah, CR là tốt đẹp. Tôi đã đánh dấu sự cố này: https://www.drupal.org/project/webform/issues/3067546
baikho avatar
lá cờ us
Đây cũng là một bài đọc thú vị về điều này [Mở rộng an toàn các lớp plugin Drupal 8 mà không sợ thay đổi hàm tạo](https://www.previousnext.com.au/blog/safely-extending-drupal-8-plugin-classes-without-fear -of-constructor-thay đổi)

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.