getvalue () của nhiều trường giá trị chỉ trả về giá trị đầu tiên


6

Tôi đã thêm một trường mới trong trường quản lý trang người dùng. Đây là một trường đa trị số nguyên mẫu. (chúng ta có thể nhập một số nguyên)

Tôi đã chỉnh sửa hồ sơ của người dùng quản trị. Tôi đã thêm (và lưu) một số giá trị trong trường này:

42
66
23
77

Trong một mô-đun tùy chỉnh, tôi tải người dùng hiện tại và tôi muốn hiển thị tất cả các giá trị của trường đa trị số nguyên của mình:

// Load the current user.
$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());

// Get field data from that user.
$mycustomfield = $user->get('field_mycustomfield');

nhưng khi tôi in $ mycustomfield-> getValue (), tôi chỉ nhận được giá trị đầu tiên:

// Display values
kint($mycustomfield->getValue()); // return only 42, but I want get 42, 66, 23, 77

Làm cách nào tôi có thể nhận được TẤT CẢ các giá trị của trường tùy chỉnh?

Cảm ơn :)

BIÊN TẬP

Tôi thử cái này ...

// Load the current user.
$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());

// Set and save field data from that user.
$user->get('field_mycustomfield')->setValue(array(1,2,3,4,5));
$user->save();


// And display
$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
$user_mycustomfield = $user->get('field_mycustomfield')->getValue();

kint($user_mycustomfield); // print array(1.2.3.4.5) x) 

Với người dùng mới, nếu tôi đặt một vài giá trị từ trang chỉnh sửa hồ sơ người dùng của anh ấy, getValue () chỉ trả về giá trị đầu tiên

Nhưng nếu tôi đặt một vài giá trị thông qua api, tôi có thể nhận được tất cả các giá trị với getValue

Nó thực sự kỳ lạ ..


1
Tôi đoán đó là một vấn đề bộ nhớ đệm. Bạn có thể đặt mã không phải trong người dùng được hiển thị, nhưng ở một nơi khác. Nếu đó là trường hợp, bạn không có thẻ bộ nhớ cache cho người dùng, nếu bạn không tự thêm nó.
4k4

Tôi chỉ có một người dùng (quản trị viên), có thể bạn đúng về vấn đề bộ đệm, nhưng tôi không hiểu tại sao tôi nhận được giá trị đầu tiên (vấn đề bộ đệm = không có giá trị? Tại sao giá trị đầu tiên nhưng không phải là giá trị tiếp theo?)
matthieu lopez

Đó là loại lĩnh vực gì? Các giá trị hiển thị lại trong biểu mẫu chỉnh sửa? Hãy thử $ user_mycustomfield [1] -> giá trị, v.v.
Berdir

@ user2137454, tôi giả sử phiên bản được lưu trong bộ nhớ cache có một giá trị. Hầu hết các lần nếu bạn có hai kết quả với cùng một mã thì đó là bộ đệm.
4k4

Với Drupal, luôn đảm bảo rằng bạn không bị ảo giác do bộ nhớ cache. Flush nó, tải lại hoặc drush nó. Nhưng hãy loại bỏ nó trước khi đi đến bất kỳ kết luận nào. Có thể là twig, css hoặc js.
Vishal Kumar Sahu

Câu trả lời:



1

Các trường Drupal được đại diện bởi ItemListlớp (cho dù chúng có nhiều giá trị hay không). Phương thức tiện lợi getValue()lặp lại thông qua getValue()phương thức của từng mục để xây dựng một biểu diễn mảng của giá trị dữ liệu.

Để lấy một chuỗi đại diện cho tất cả các mục trong danh sách, bạn có thể sử dụng ItemList::getString(), lặp lại qua tất cả các mục danh sách và các cuộc gọi getString() trên mỗi mục, sau đó cấy chúng bằng ", "keo.

Vì vậy, ví dụ của bạn:

var_dump($user->field_mycustomfield->getString());

sẽ xuất

string(14) "42, 66, 23, 77"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.