سيمفوني2:كيفية الحصول على كائن المستخدم داخل وحدة التحكم عند استخدام FOSUserBundle؟
-
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 () اختصار.
fosuser ^ 1.3 يمكنك الحصول على المستخدم الحالي من داخل وحدة تحكم يمتد basecontroller مثل هذا: giveacodicetagpre.