Điểm:0

Không đặt bộ đệm khi tạo hành động cục bộ động thông qua các công cụ phái sinh

lá cờ vn

Tôi đang cố gắng tạo một hành động cục bộ động thông qua một công cụ phái sinh. Công cụ phái sinh hoạt động và trả về một liên kết được tạo động nhưng bộ đệm dường như vẫn duy trì giá trị của nó.

Theo điều này Nhật ký thay đổi lõi Drupal, tôi hiểu rằng tôi có thể thiết lập các tham số bộ đệm trên công cụ phái sinh mà tôi đã thử nhưng vô ích cho đến nay - tôi chưa quen lắm với các khái niệm này nên đánh giá cao bất kỳ hướng dẫn nào về cách ngăn chặn $gid khỏi bị lưu trữ.

Đây là hành động địa phương của tôi dẫn.links.action.yml:

khách hàng tiềm năng.new_deal:
  công cụ dẫn xuất: 'Drupal\leads\Plugin\Derivative\DynamicLocalTasks'

Đây là dẫn xuất của tôi:

<?php

không gian tên Drupal\leads\Plugin\Derivative;

sử dụng Drupal\Thành phần\Plugin\Derivative\DeriverBase;
sử dụng Drupal\Core\Cache\CacheableDependencyInterface;
sử dụng Drupal\Core\Cache\CacheableDependencyTrait;


/**
* Xác định các tác vụ cục bộ động.
*/
lớp DynamicLocalT task mở rộng DeriverBase {
  sử dụng CacheableDependencyTrait;
  /**
  * {@inheritdoc}
  */
  hàm công khai getDerivativeDefinitions($base_plugin_definition) {
    $groupLead = getGroupsUserIsLead();

    nếu (isset($groupLead[0])){
      $gid = $groupLead[0];
    }
    khác{
      trả về \Drupal\Core\Access\AccessResult::forbidden();
    }

    // Triển khai logic động để cung cấp giá trị cho các khóa giống như trong ví dụ.links.task.yml.
    $this->derivatives['leads.new_deal'] = $base_plugin_definition;
    $this->derivatives['leads.new_deal']['title'] = "Giao dịch mới";
    $this->derivatives['leads.new_deal']['route_name'] = 'entity.group_content.create_form';
    $this->derivatives['leads.new_deal']['appears_on'] = ['leads.deals'];
    $this->derivatives['leads.new_deal']['route_parameters'] = ['plugin_id' => 'group_node:deals','group' => $gid];
    $this->cacheMaxAge = 0;
    $this->getCacheMaxAge();
    
    trả về cha mẹ::getDerivativeDefinitions($base_plugin_definition);
  }

  hàm công khai getCacheMaxAge() {
    trả về 0;
  }

}
Điểm:2
lá cờ cn

Việc thêm CacheableDependencyTrait vào trình dẫn xuất không làm cho nó có thể lưu vào bộ nhớ cache hoàn toàn. Không có mã nào trong Drupal kiểm tra các phần phụ thuộc có thể lưu trong bộ nhớ cache của trình dẫn xuất trong một yêu cầu bình thường. Bạn phải trả lại tiêu đề, tên tuyến đường, v.v. từ plugin tác vụ cục bộ, nơi bạn cũng có thể sử dụng các phương thức getCache*(). Nhìn thấy https://drupal.stackexchange.com/a/273293/47547

Điểm:1
lá cờ vn

Theo gợi ý của @4uk4, đây là những gì tôi đã làm:

khách hàng tiềm năng.new_deal:
  route_name: entity.group_content.create_form
  tiêu đề: 'Giao dịch mới'
  route_parameters:
    plugin_id: group_node: giao dịch
    nhóm: 0
  lớp: 'Drupal\leads\Plugin\Menu\DynamicLocalT task'
  Xuất hiện trên:
    - 'dẫn.giao dịch'
<?php

không gian tên Drupal\leads\Plugin\Menu;

sử dụng Drupal\Core\Menu\LocalActionDefault;
sử dụng Drupal\Core\Routing\RouteMatchInterface;

lớp DynamicLocalT task mở rộng LocalActionDefault {
  hàm công khai getRouteParameters(RouteMatchInterface $route_match) {
    $groupLead = getGroupsUserIsLead();

    $gid = $groupLead[0] ?? VÔ GIÁ TRỊ;

    trở lại [
      'plugin_id' => 'group_node:giao dịch',
      'nhóm' => $gid,
    ]; 
  }
}
lá cờ vn
Đáng chú ý là tôi không cần thay đổi hành vi của bộ đệm bằng phương pháp này.

Đă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.