Drupal 8 nhận giá trị trường xem theo chương trình

Một tweet gần đây của CHX khiến tôi suy nghĩ. Drupal 8 đã được phát hành gần 5 năm trước và một số thứ vẫn còn là một bí ẩn đối với nhiều nhà phát triển, bao gồm cả tôi. Đây là tweet tôi đã đề cập

Hình ảnh

Cũng giống như phần lớn những người trong cuộc thăm dò của anh ấy, tôi cũng không biết rằng bạn có thể rút ngắn điều này

$entity->field_name->value = 'foo' 
$entity->field_name->target_id = 123

để này

$entity->field_name = 'foo' 
$entity->field_name = 123

Đó là một cách ngắn hơn để viết cùng một thứ, điều này tốt, nhưng cá nhân tôi thích sử dụng phương thức set[] như thế này

$entity->set['field_name', 'foo']; 
$entity->set['field_name', 123];

Bằng cách nào đó, điều này có vẻ và cảm thấy tốt hơn nhiều theo ý kiến ​​​​của tôi. Điều đáng nói là đối với các trường tham chiếu thực thể thay vì ID thực thể, bạn có thể đặt đối tượng thực thể như thế này

$entity->set['field_name', $another_entity];

Điều tương tự cũng áp dụng nếu bạn không sử dụng phương thức set[]

$entity->field_name = $another_entity;

Còn việc cập nhật các trường đa giá trị theo chương trình thì sao?

Các trường đa giá trị không khác nhau. Bạn chỉ cần sử dụng mảng. Vì vậy, thay vì điều này

$entity->field_name_muti->value = ['foo', 'bar', 'baz']; 
$entity->field_name_multi->target_id = [1, 2, 3]
$entity->field_name_multi->target_id = [$another_entity1, $another_entity2, $another_entity3]

bạn có thể sử dụng cái này

$entity->field_name_muti = ['foo', 'bar', 'baz']; 
$entity->field_name_multi = [1, 2, 3]
$entity->field_name_multi = [$another_entity1, $another_entity2, $another_entity3]

Có bất kỳ trường hợp ngoại lệ?

Chắc chắn rồi. Bạn không thể sử dụng cách rút gọn nếu bạn có một loại trường có nhiều thuộc tính. Ví dụ: trường Giá trong Drupal Commerce có nhiều thuộc tính. Bạn có thể nhìn thấy. Để đặt giá trị của trường Giá, bạn có thể làm điều này

$entity->field_price->number = 10; 
$entity->field_price->currency_code = 'EUR';

Trong trường hợp này, bạn phải đặt giá trị cho cả thuộc tính Số và Mã tiền tệ. Cách khác để đặt trường đa thuộc tính là như thế này

Các trường văn bản thông thường

Trong drupal 8, khi trường có thể có nhiều giá trị

________số 8

Khi bạn biết trường sẽ chỉ trả về một giá trị, hãy sử dụng như sau

$value = $entity->field_myfield->getString[]; // or
$value = $entity->get['field_myfield']->getString[];
// where $value is your direct result

trường liên kết

Trường liên kết cung cấp một số chức năng khác

$entity->field_name = 'foo' 
$entity->field_name = 123
0

Tham chiếu thực thể

Một loại trường được sử dụng phổ biến khác là tham chiếu thực thể.  

$entity->field_name = 'foo' 
$entity->field_name = 123
1

Drupal 7 và 8 đã rất tuyệt, nhưng bây giờ Drupal 9 đã xuất hiện, tại sao và bạn nên nâng cấp như thế nào?

  1. Nâng cấp trang web của bạn lên Drupal 8 hoặc 9
  2. Drupal 9, nó ở đây
  3. Kết xuất các trường trong Drupal 9 [đúng cách]

Đọc thêm

Nhiều người trong chúng tôi tại ComputerMinds luôn tự hào về việc làm mọi thứ Drupally đúng cách bất cứ khi nào có thể, và sau đó giúp cộng đồng cũng làm như vậy. Một trong những điều này là hiển thị giá trị từ các trường trên thực thể nội dung. Trước đây chúng tôi đã viết về cách thực hiện việc này trong Drupal 7 và Drupal 8. Bây giờ đến lượt Drupal 9. Rất may, phiên bản cập nhật này về cơ bản giống với phiên bản trước, vì D9 rất giống với D8 về bề ngoài, nhưng đã loại bỏ hành trình cũ để cho phép nó tiếp tục cải thiện. Vì vậy, câu trả lời ngắn gọn cho "Làm cách nào tôi có thể hiển thị trường theo chương trình?"

$entity->field_name = 'foo' 
$entity->field_name = 123
2

Điều đó không tuyệt sao? . Đó là mục đích của bản cập nhật; . Trong khi nâng cấp từ Drupal 7 có thể là một nhiệm vụ khổng lồ [bạn có thể muốn liên hệ với chúng tôi để được trợ giúp. ], việc chuyển sang D9 đơn giản hơn nhiều

Vậy có gì khác nhau không? . Sự khác biệt phù hợp nhất để hiển thị các trường trong Drupal 8 so với Drupal 9 là nếu ban đầu bạn đang tải đối tượng thực thể [

$entity->field_name = 'foo' 
$entity->field_name = 123
5] bằng dịch vụ
$entity->field_name = 'foo' 
$entity->field_name = 123
6 [e. g. từ
$entity->field_name = 'foo' 
$entity->field_name = 123
7], bây giờ bạn cần sử dụng dịch vụ
$entity->field_name = 'foo' 
$entity->field_name = 123
8 [e. g.
$entity->field_name = 'foo' 
$entity->field_name = 123
9]

Bài viết trước của chúng tôi về các trường kết xuất trong D8 chứa nhiều chi tiết hơn, điều này vẫn hoàn toàn hợp lệ đối với Drupal 9. Điều đó sẽ giúp bạn điều chỉnh cài đặt trình định dạng để xem một trường hoặc cách lấy các giá trị thô ra khỏi trường. Ví dụ

$entity->field_name = 'foo' 
$entity->field_name = 123
3

Một nhận xét về bài viết đó đã chỉ ra rằng bạn có thể gặp lỗi nghiêm trọng nếu bạn sử dụng mã này quá ngây thơ. Đó là bởi vì các phương pháp ma thuật được sử dụng ở đây, với giả định rằng bạn chắc chắn rằng trường tồn tại trên thực thể. Nếu bạn không, sau đó chỉ cần phá vỡ chuỗi xuống

$entity->field_name = 'foo' 
$entity->field_name = 123
4

Ngoài ra, bạn có thể sử dụng phương pháp

$entity->set['field_name', 'foo']; 
$entity->set['field_name', 123];
0 thay vì phương pháp ma thuật. Nhưng nếu bạn làm như vậy, có lẽ bạn sẽ muốn bao quanh mã của mình bằng Xử lý ngoại lệ để bắt các ngoại lệ của
$entity->set['field_name', 'foo']; 
$entity->set['field_name', 123];
1, vì các trình thu thập phương thức ma thuật sẽ nhẹ nhàng hơn trong nhiều tình huống hơn

 

Ảnh của Belle Hunt trên Bapt

Xuất bản năm
  • hành tinh Drupal,
  • định dạng trường,
  • kết xuất,
  • thực thể,
  • Drupal 9

Xin chào, cảm ơn vì đã đọc

ComputerMinds là chuyên gia Drupal của Vương quốc Anh có văn phòng tại Bristol và Coventry. Chúng tôi cung cấp một loạt các dịch vụ Drupal bao gồm Tư vấn, Phát triển, Đào tạo và Hỗ trợ. Dù vấn đề Drupal của bạn là gì, chúng tôi có thể trợ giúp

Chủ Đề