سيمفوني2:كيفية الحصول على كائن المستخدم داخل وحدة التحكم عند استخدام FOSUserBundle؟

StackOverflow https://stackoverflow.com//questions/12656388

  •  11-12-2019
  •  | 
  •  

سؤال

أنا أستخدم FOSUserBundle لمصادقة المستخدمين.

أحاول الحصول على كائن المستخدم داخل وحدة التحكم لتسجيل رحلة حيث يجب علي إضافة كائن المستخدم إلى هذه الرحلة قبل الحفظ.

لم أجد كيفية القيام بذلك لأن الطريقة التالية وجدتها في مستند Symfony:

$user = $this->container->get('security.context')->getToken()->getUser();

يعرض اسم المستخدم كسلسلة، ولكني بحاجة إلى الكائن بأكمله.

حاليًا أستخدم هذه الطريقة، لكنها لا تعمل بشكل صحيح.

$username = $this->container->get('security.context')->getToken()->getUser();
$em = $this->container->get('doctrine')->getEntityManager();
$user = $em->getRepository('SiteUtilisateurBundle:Utilisateur')->find($username);

كيف يمكنني القيام بذلك بشكل صحيح؟

هل كانت مفيدة؟

المحلول

أعتقد Ramon هو الصحيح.لديك بالفعل كائن المستخدم.

أيضا في Symfony> 2.1.x يمكنك استخدام giveacodicetagpre.

داخل وحدة تحكم.

نصائح أخرى

الوثائق الخاصة ب getUser تشير الطريقة إلى:

إما أن تقوم بإرجاع كائن يقوم بتنفيذ __toString()، أو يتم إرجاع سلسلة بدائية.

وإذا نظرنا في FOS\UserBundle\Model\User انتهى الفصل هنا (فئة المستخدم الأساسية التي تستخدمها FOSUserBundle) يمكننا أن نرى أنها تحتوي بالفعل على ملف __toString طريقة:

public function __toString()
{
    return (string) $this->getUsername();
}

أعتقد أنك حصلت بالفعل على User كائن ولكن لأنه ينفذ أ __toString الطريقة يمكن تقديمها مباشرة في القوالب.

في Twig يمكنك استخدام:

{{ dump(user) }}

لمعرفة نوع الكائن لديك.لكنك في الواقع تستخدم كائنًا وليس سلسلة.

الحل: giveacodicetagpre.

في FOSUser 1.3 لا يمكنك الاتصال مباشرة $this->getUser في وحدة التحكم الأمنية.

عليك الاتصال $this->container->get('security.context')->getToken()->getUser();

وهذا يكفي للوصول إلى كائن المستخدم.لا حاجة للاتصال $user = $em->getRepository('SiteUtilisateurBundle:Utilisateur')->find($username);

وعلاوة على ذلك الخاص بك find تقوم الطريقة تلقائيًا وبشكل ضمني بإرسال كائن $username الأولي إلى السلسلة لأنها لا تنتظر كائنًا كوسيطة.

كان لدي نفس المشكلة، لحلها إضافة فئات FOS في قسم استخدامك I.E: giveacodicetagpre.

في Symfony>= 3.2، وثائق الولايات:

طريقة بديلة للحصول على المستخدم الحالي في وحدة تحكم اكتب - تلميح وسيطة تحكم مع userinterface (والتقصير الافتراضي إلى NULL إذا تم تسجيل الدخول هو اختياري): giveacodicetagpre.

يوصى بهذا فقط للمطورين ذوي الخبرة الذين لا يمتدون من تحكم الأساس Symfony وليس T استخدم Controllerrait إما. خلاف ذلك، يوصى بالاستمرار في استخدام GetUser () اختصار.

هنا هو مدونة وظيفة < / a> حول ذلك

fosuser ^ 1.3 يمكنك الحصول على المستخدم الحالي من داخل وحدة تحكم يمتد basecontroller مثل هذا: giveacodicetagpre.

giveacodicetagpre.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top