কোনও টেমপ্লেটে লগ-ইন করা ব্যবহারকারীকে অ্যাক্সেস করা


94

ব্যবহারকারীর নিবন্ধকরণ https://github.com/FendersOfSymfony/FOSUserBundle দিয়ে শুরু করতে আমি FOSuserbundle ব্যবহার করছি

আমি এটি নিবন্ধকরণ / লগ ইন এবং আউট খুঁজে পেয়েছি। আমি এখন যা করতে চাই তা হ'ল লগ-ইন করা ব্যবহারকারীদের ডেটা গ্রহণ করা এবং এটি আমার সাইটের প্রতিটি পৃষ্ঠায় উপস্থাপন করা। শিরোনামের ধরণের জিনিসটিতে "হাই ব্যবহারকারীর নাম" পছন্দ করুন।

দেখে মনে হচ্ছে আমার অ্যাপ / রিসোর্স / ভিউ / বেস html.twig এ কোনও কন্ট্রোলার এম্বেড করা এই http://symfony.com/doc/current/book/templating.html#e এমবেডিং- নিয়ন্ত্রণকারীদের করার সেরা উপায়

সুতরাং আমি ব্যবহারকারীর প্রোফাইল ডেটা অ্যাক্সেস করতে আমার নিয়ামক লিখেছি। আমি যা বুঝতে পারি না তা হ'ল আমার এম্বেড থাকা নিয়ামকটিতে FOS পদ্ধতিগুলি কীভাবে অ্যাক্সেস করা যায়। সুতরাং আমার একেম / ইউজারবান্ডেল / কন্ট্রোলার / ইউজারকন্ট্রোলআরএফপি থেকে আমি এটি করতে চাই:

public function showAction()
{
    $user = $this->container->get('security.context')->getToken()->getUser();
    if (!is_object($user) || !$user instanceof UserInterface) {
        throw new AccessDeniedException(
               'This user does not have access to this section.');
    }

    return $this->container->get('templating')
      ->renderResponse('FOSUserBundle:Profile:show.html.'.$this->container
      ->getParameter('fos_user.template.engine'), array('user' => $user));
}

যা আমি ধরেছিলাম: বিক্রেতা / বান্ডিল / এফওএস / ইউজারবান্ডেল / নিয়ন্ত্রক / প্রোফাইলকন্ট্রোলআরএফপি

উত্তর:


229

আপনি নিয়ামক কোনও কিছুর অনুরোধ না করে সরাসরি ডাবল টেম্পলেটে ব্যবহারকারী ডেটা অ্যাক্সেস করতে পারেন। ব্যবহারকারী যে ভালো অ্যাক্সেসযোগ্য: app.user

এখন, আপনি ব্যবহারকারীর প্রতিটি সম্পত্তি অ্যাক্সেস করতে পারেন। উদাহরণস্বরূপ, যদি আপনি যে ভালো ব্যবহারকারীর নাম অ্যাক্সেস করতে পারে: app.user.username

সতর্কতা, যদি ব্যবহারকারী লগ না থাকে তবে app.userএটি বাতিল।

আপনি যদি ব্যবহারকারী লগড আছেন কিনা তা যদি পরীক্ষা করতে চান তবে আপনি is_grantedটুইগ ফাংশনটি ব্যবহার করতে পারেন । উদাহরণস্বরূপ, আপনি যদি ব্যবহারকারীটি পরীক্ষা করতে চান তবে ROLE_ADMINআপনাকে কেবল এটি করতে হবে is_granted("ROLE_ADMIN")

সুতরাং, আপনার প্রতিটি পৃষ্ঠায় আপনি এটি করতে পারেন:

{% if is_granted("ROLE") %}
    Hi {{ app.user.username }}
{% endif %}

8
ধন্যবাদ আমি আসলে "IS_AUTHENTICATED_REMEMBERED" এর জন্য "ROLE" পরিবর্তন করেছি এবং এটি দুর্দান্ত কাজ করেছে।
ed209

5
আমি FOSuserbundle ব্যবহার করছি না (যদি তা এখন না আসে) তবে app.user.usernameএখনও আমার পক্ষে কাজ করে worked কারও পক্ষে জানতে কার্যকর হতে পারে।
জেসন সোয়েট

4
সিমফনি \ বান্ডিল \ ফ্রেমওয়ার্কবান্ডেল \ টেম্প্লেটিং \ গ্লোবাল ভ্যারিয়েবলগুলি FOSUserBundle এর অংশ নয় যা এই কারণেই সর্বদা কাজ করে (যেখানে ডান গ্লোবালগুলি 2.5 তে সংজ্ঞায়িত করা হয়) (জেসন সোয়েট মার্চ 30 'র সাথে)
ডেরস্টফেল

16

সিমফনি ২.6 এবং এর উপরে আমরা ব্যবহার করতে পারি

{{ app.user.getFirstname() }}

অ্যাপ্লিকেশন হিসাবে। ট্যুইগ টেমপ্লেটের জন্য সুরক্ষার বিশ্বব্যাপী পরিবর্তনশীল হ্রাস করা হয়েছে এবং 3.0 থেকে সরানো হবে

অধিক তথ্য:

http://symfony.com/blog/new-in-symfony-2-6- সুরক্ষা- কম্পোনেন্ট- উন্নতি

এবং এতে গ্লোবাল ভেরিয়েবলগুলি দেখুন

http://symfony.com/doc/current/references/twig_references.html


4
অপ্রয়োজনীয় পদ্ধতি কল। আপনি এই জাতীয় গতিশীল বৈশিষ্ট্য ব্যবহার করতে পারেন {{ app.user.firstname }}। আমার ধারণা এটি আরও ফ্রন্ট-এন্ড-বান্ধব।
kacper3w

4
যদিও আমি অপ্রয়োজনীয় হওয়ার বিষয়ে উপরের মন্তব্যের সাথে একমত, আমি এটিকে উজ্জীবিত করতে যাচ্ছি কারণ এটি প্রমাণ করে যে কাস্টম পদ্ধতিগুলি যদি ইচ্ছা হয় তবে ব্যবহার করা যেতে পারে
সাইমন

-1
। {app.user.username | ডিফল্ট ('')}

উদাহরণস্বরূপ কেবল লগইন ব্যবহারকারীর নাম উপস্থাপন করুন, ফিল্টার ফাংশন ডিফল্ট ('') ব্যবহারকারীর লগইন না করার সময় কেবলমাত্র বিরক্তিকর ত্রুটি বার্তা এড়ানো উচিত।


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