Điểm:0

Làm cách nào để lưu trữ giá trị an toàn của một trường ngoài trường gốc?

lá cờ kz

Tôi có loại trường tùy chỉnh mà tôi tạo bằng mô-đun tùy chỉnh. Nó là một trường văn bản đơn giản nơi người dùng nhập vào một chuỗi. Tôi muốn giữ lại hai bản sao của trường này:

  1. Giá trị chuỗi chính xác như người dùng đã nhập.
  2. Một giá trị an toàn của cùng một chuỗi.

Đây là cách tôi tạo trường:

lớp MyItem mở rộng FieldItemBase {

  /**
   * {@inheritdoc}
   */
  lược đồ hàm tĩnh công khai (FieldStorageDefinitionInterface $field_definition) {
    trở lại [
      'cột' => [
        'giá trị' => [
          'loại' => 'văn bản',
          'kích thước' => 'nhỏ',
          'không rỗng' => SAI,
        ],
        'giá trị an toàn' => [
          'loại' => 'văn bản',
          'kích thước' => 'nhỏ',
          'không rỗng' => SAI,
        ],
      ],
    ];
  }
â¦

}

Tôi cho rằng tôi nên tạo ra một giá trị an toàn của chuỗi trong hook_node_presave() và bằng cách nào đó xâm nhập vào thực thể ở đó (nhưng việc sửa chữa những giả định này đều được hoan nghênh).

Tôi không gặp vấn đề gì khi nhận giá trị chuỗi do người dùng nhập và để tính giá trị an toàn:

$value = $entity->field_myfield->getString();
$safevalue = makeSafe($value);

Nhưng tôi không biết làm thế nào để có được $safevalue được lưu trữ trong cơ sở dữ liệu.

Chỉnh sửa

Tôi thấy rằng điều này có hai câu trả lời gần như giống hệt nhau. Cả hai đều hoạt động tốt nếu số lượng của trường là một, vì vậy tôi đã nâng cấp cả hai. Vì tôi không thể chấp nhận cả hai, nên tôi đã chấp nhận một từ apaderno để biết thêm chi tiết về propertyDefinitions().

Tôi vẫn không thể làm cho điều này hoạt động với trường đa giá trị, nhưng tôi nghĩ rằng có lẽ cần phải là một câu hỏi riêng.

Điểm:2
lá cờ us

Nếu giá trị an toàn đã được định nghĩa là thuộc tính trường trong propertyDefinitions(), nó có thể được truy cập như $entity->field_myfield->safeValue, để đọc nó hoặc viết nó.

Trong lõi Drupal, một ví dụ về trường lưu trữ bản sao đã xử lý của giá trị trường là Mục văn bản lớp, của ai propertyDefinitions() phương thức chứa đoạn mã sau.

$properties['value'] = DataDefinition::create('string')
  ->setLabel(t('Văn bản'))
  -> setRequired(TRUE);
$properties['format'] = DataDefinition::create('filter_format')->setLabel(t('Định dạng văn bản'));
$properties['đã xử lý'] = DataDefinition::create('string')
  ->setLabel(t('Văn bản đã xử lý'))
  ->setDescription(t('Văn bản có định dạng văn bản được áp dụng.'))
  -> setComputing (TRUE)
  ->setClass('\Drupal\text\TextProcessed')
  ->setSetting('nguồn văn bản', 'giá trị')
  -> setInternal(FALSE);

Lớp đó định nghĩa thuộc tính là được tính toán. Đó là lý do tại sao nó lược đồ() phương thức không bao gồm thuộc tính đó.

Điểm:2
lá cờ cn

Để tiết kiệm:

$value = $entity->field_myfield->getString();
$entity->field_myfield->safevalue = makeSafe($value);

Để nạp:

$safe_value = $entity->field_myfield->safevalue;

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