ব্যবহারকারীর ক্ষেত্রে অ্যাক্সেস করবেন?


18

$account = \Drupal::currentUser()এতে ব্যবহারকারী বস্তুটি লোড হয় $accountতবে আমি কীভাবে ব্যবহারকারীর অবজেক্টে (অ্যাডমিন ইউআইয়ের মাধ্যমে) তৈরি কাস্টম ক্ষেত্রগুলিতে অ্যাক্সেস করব?

সঙ্গে dpm($account)আমি আমার কাস্টম ক্ষেত্র কোনো দেখতে পাবে না।


কাস্টম ক্ষেত্রগুলির কি এখনও কোনও মান আছে? তাদের প্রকৃতপক্ষে কোনও মান সেট না হওয়া অবধি তাদের সত্তা অবজেক্ট থেকে নিখোঁজ থাকার কথা মনে হচ্ছে
ক্লাইভ

হ্যাঁ, তাদের মান আছে। আমি ইউইডিটি দিয়ে পেতে \Drupal::currentUser()->id()পারি এবং তারপরে একটি ডাটাবেস কোয়েরি করতে পারি, তবে ডি 7-তে তারা ইতিমধ্যে সেখানে উপস্থিত ছিল?
24ma13wg

এই সমস্যাটি কেবল কারেন্ট ব্যবহারকারী সম্পর্কে নয়; এটি সাধারণত ব্যবহারকারী অবজেক্টের সাথে সম্পর্কিত। api.drupal.org/api/drupal/… আপনাকে সেখানে অর্ধেক পৌঁছে দেয় তবে সাধারণত ড্রুপাল ডক্সের মতো এটি অন্ধকারে অনেকটা ছেড়ে যায়
সমুদ্র 26.230

উত্তর:


29

\Drupal::currentUser()একটি Drupal\Core\Session\AccountInterfaceবস্তু ফেরত দেয় এটি একটি সম্পূর্ণ ব্যবহারকারী হতে পারে ( Drupal\user\UserInterfaceএটি হ'ল) ​​তবে এখনই ডিফল্ট প্রমাণীকরণ পদ্ধতির জন্য তা নয়।

ব্যবহারকারীর সত্তা এবং সমস্ত ক্ষেত্র পেতে এটি ব্যবহার করুন:

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

ডি 7 এর ঠিক একই আচরণ ছিল, পার্থক্যটি এখন কেবল ডি 7-এ, তারা কেবল আলাদা স্টডি ক্লাস'ই ছিল, এখন আপনার দুটি স্পষ্ট করার জন্য স্পষ্ট ইন্টারফেস রয়েছে।


ডাউন-ভোট সত্ত্বেও, এই উত্তরটি সঠিক, এমনকি দ্রুপাল about সম্পর্কেও, ড্রুপাল $GLOBALS['user']in এ একটি সম্পূর্ণ লোডযুক্ত ব্যবহারকারী বস্তু নেই; এটিতে কেবল ব্যবহারকারীদের সারণীতে পাওয়া তথ্য রয়েছে।
kiamlaluno

হ্যাঁ, কেন এটি ডাউনটা পেয়েছে তা নিশ্চিত নয়। এটি সঠিক, উভয়ই ডি 7 এবং ডি 8।
mpdonadio

এটি উত্তরের একটি অংশ মাত্র। এবং প্রকৃতপক্ষে, এটি মূল "সমাধান" এর চেয়ে আপনাকে ডেটার আরও কাছে পাবে না। আপনাকে অবজেক্ট থেকে ডেটা "পেতে" হবে। এটি করার জন্য - নীচে @ বাটিগোলিক্স পোস্ট করা ওয়ার্কিং সলিউশনটি দেখুন।
সমুদ্র 26.2

নোট করুন যে ক্ষেত্রগুলির মান নেই সেগুলি মান অ্যারেতে উপস্থিত হবে না।
জেইনগ্রিন

16

এবং কীভাবে এটি সেই বস্তু থেকে বেরিয়ে আসবে তা এখানে:

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

// Get field data from that user.
$website = $user->get('field_website')->value;
$body = $user->get('body')->value;

// Some default getters include.
$email = $user->get('mail')->value;
$name = $user->get('name')->value;
$uid= $user->get('uid')->value;

1
আপনি ব্যবহারকারীর আইডি পাবেন $user->id()
kiamlaluno

এছাড়াও, ব্যবহারকারীর সত্তার একটি বডি বেস ক্ষেত্র নেই। যদি এটি ইউজার ইন্টারফেস থেকে একটি ক্ষেত্র যোগ করা হয়, তবে ফিল্ডের নামটি ফিল্ড_ দিয়ে শুরু হবে । আমি সেই উদাহরণটি এড়াতে পারব, কারণ এটি ব্যবহারকারীদের মনে করে যে এটি ড্রুপাল কোর কোড থেকে যুক্ত বেস ক্ষেত্র।
কিমলালুনো

1

Drupal::currentUser()বাস্তবায়নকারী একটি বস্তু প্রদান করে Drupal\Core\Session\AccountProxyInterface। এটি যা থেকে ফিরে এসেছে তার থেকে পৃথক User::load(), যা একটি অবজেক্ট বাস্তবায়ন করে Drupal\user\UserInterface

এর অর্থ Userএটির ক্ষেত্রগুলি লোড হয়ে আপনি একটি পূর্ণ বস্তু পাবেন তা নিশ্চিত নয় , তবে আপনি কোনও Userবস্তু পাওয়ার আশ্বাসও দিয়েছেন না । ফলস্বরূপ, আপনি Userক্লাস থেকে উপলব্ধ কিছু পদ্ধতি কল করতে কল করুন User::get()। আপনি কল করতে পারেন AccountInterface::id(), যা ব্যবহারকারীর আইডি ফিরিয়ে দেয়; এর সাথে, আপনি তারপরে পুরো Userবস্তুটি লোড করতে পারেন User::load()এবং সত্তার সাথে সংযুক্ত সমস্ত ক্ষেত্রের মডিউলগুলিতে অ্যাক্সেস পেতে পারেন।

use Drupal\Core\Session\AccountProxyInterface;
use Drupal\user\Entity\User;

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

এর সাথে $account, আপনি তখন ব্যবহারকারীর অ্যাকাউন্টের সাথে সম্পর্কিত সমস্ত ক্ষেত্র অ্যাক্সেস করতে পারেন।


সম্ভবত, তবে এটি এখনও প্রশ্ন তোলে: "আপনি কীভাবে কাস্টম ক্ষেত্রগুলি অ্যাক্সেস করবেন" do @ বাটিগোলিক্স
সমুদ্র 26.2

প্রশ্নটি আরও কেন $account = \Drupal::currentUser(): dpm($account);কোনও কাস্টম ক্ষেত্র দেখায় না? তবে এই উত্তরটি কীভাবে ব্যবহারকারীর সত্তা ক্ষেত্রগুলিতে অ্যাক্সেস করতে পারে তা বলে। যেহেতু প্রশ্নটি ওপি কোন ক্ষেত্রগুলিতে অ্যাক্সেসের চেষ্টা করছে তা বলে না, উত্তরটি কেবল কোন পদ্ধতিটি ব্যবহার করতে হবে তা বলে। @ বাটিগোলিক্স থেকে উত্তর নেই।
kiamlaluno

-2

এপিআই ফাংশনটি ব্যবহার করে এখানে ওয়ান-লাইনার দেওয়া হয়েছে:

$account = \Drupal::currentUser()->getAccount();

এর পরে, ব্যবহারকারীর ক্ষেত্রগুলি অ্যাক্সেসযোগ্য হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.