कस्टम उपयोगकर्ता फ़ील्ड का मान प्राप्त करें


13

मेरे पास एक कस्टम फ़ॉर्म है जिसे कस्टम उपयोगकर्ता फ़ील्ड से डिफ़ॉल्ट मान प्रदर्शित करने की आवश्यकता है। फ़ील्ड / व्यवस्थापक / कॉन्फ़िगरेशन / लोगों / खातों / फ़ील्ड के तहत बनाई गई थी और इसका मशीन का नाम फ़ील्ड_प्र_प्रति_स्थान_से_ है।

//get user
$userCurrent = \Drupal::currentUser();
$uid = $userCurrent->id();
$r_period = $userCurrent->field_r_period_length_sec;

हालाँकि, मान प्रदर्शित नहीं होता है और मुझे यह त्रुटि मिलती है:

सूचना: अपरिभाषित संपत्ति: Drupal \ Core \ Session \ AccountProxy :: $ field_r_period_length

मैं क्या गलत कर रहा हूं?

जवाबों:


17

बर्दिर के जवाब ने मुझे एक खोज शब्द दिया जो मुझे यह मिला:

$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());

थोड़ा परीक्षण और त्रुटि के बाद, यह वह कोड है जो किसी और की आवश्यकता के मामले में काम करता है:

$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
$r_period = $user->field_r_period_length_sec->value;

कई मूल्यों के लिए, का उपयोग करें

$r_period = $user->get('field_r_period_length_sec')->getValue();

1
में PHPStorm से चेतावनी चाहने निकालें किसी के लिए भी $r_period = $user->field_r_period_length_sec->value;इस टिप्पणी जोड़ने के /** @var $user \Drupal\user\Entity\User */ऊपर$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
नील नंद

3

वर्तमान उपयोगकर्ता ऑब्जेक्ट उपयोगकर्ता इकाई नहीं है। आपको निर्दिष्ट जानकारी के अलावा किसी भी क्षेत्र तक पहुंचने के लिए उस आईडी के साथ उपयोगकर्ता को लोड करने की आवश्यकता है AccountInterface


2

मुझे नहीं पता है कि ये जवाब कब से काम नहीं करता है, लेकिन ड्रुपल 8.5 के साथ उपरोक्त समाधान हर समय अशक्त है।

जांच के बाद उपयोगकर्ता प्रोफ़ाइल से कस्टम फ़ील्ड तक पहुँचने के लिए समाधान है:

$activeProfile = \Drupal::getContainer()
  ->get('entity_type.manager')
  ->getStorage('profile')
  ->loadByUser(User::load([uid]), '[profile_machine_name]');

तब आप कर सकते हैं

$activeProfile->field_xxx->value

धन्यवाद! मैं उपयोगकर्ता प्रोफ़ाइल से विशिष्ट फ़ील्ड प्राप्त करने में सक्षम था। लेकिन सोच रहे हैं कि आप एक प्रोफ़ाइल फ़ील्ड नाम को कैसे सेट / अपडेट कर सकते हैं? टीआईए
जॉन रे टेनक्विनको

1
$ प्रोफ़ाइल-> सेट ('
फ़ील्ड_नाम

1

Entity::load()बंद है \Drupal::entityManager();जिसमें से हटा दिया गया है

यह करने के लिए एक बेहतर तरीका UnitTypeManager () का उपयोग करके है।

$user = \Drupal::entityTypeManager()->getStorage('user')->load($current_user->id());
$r_period = $user->field_r_period_length_sec->value;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.