मैं वर्तमान में लॉग इन उपयोगकर्ता को किसी सेवा में इंजेक्ट करने का प्रयास कर रहा हूं। मेरा लक्ष्य उपयोगकर्ता प्राथमिकताओं के आधार पर इसे आउटपुट करने के लिए कुछ जुड़वां कार्यक्षमता का विस्तार करना है। इस उदाहरण में मैं उपयोगकर्ता विशिष्ट टाइमज़ोन का उपयोग कर किसी भी दिनांक फ़ंक्शन को आउटपुट करना चाहता हूं।Symfony2: सेवा में वर्तमान उपयोगकर्ता इंजेक्ट करें
वर्तमान उपयोगकर्ता को किसी सेवा में इंजेक्ट करने का कोई तरीका नहीं प्रतीत होता है, जो वास्तव में मेरे लिए अजीब लगता है। सुरक्षा संदर्भ इंजेक्शन करते समय, उपयोगकर्ता को
में लॉग इन किया गया है, तो भी यह टोकन नहीं है, मैं एफओएस उपयोगकर्ता बंडल का उपयोग कर रहा हूं।
services:
...
twigdate.listener.request:
class: App\AppBundle\Services\TwigDateRequestListener
arguments: [@twig, @security.context]
tags:
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
<?php
namespace App\AppBundle\Services;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
class TwigDateRequestListener
{
protected $twig;
function __construct(\Twig_Environment $twig, SecurityContext $context) {
$this->twig = $twig;
//$this->user = $context->get...;
var_dump($context); die;
}
public function onKernelRequest(GetResponseEvent $event) {
// $this->twig->getExtension('core')->setDateFormat($user->getProfile()->getFormat());
// $this->twig->getExtension('core')->setTimeZone($user->getProfile()->getTimezone());
}
}
output:
object(Symfony\Component\Security\Core\SecurityContext)[325]
private 'token' => null
private 'accessDecisionManager' =>
object(Symfony\Component\Security\Core\Authorization\AccessDecisionManager)[150]
private 'voters' =>
array
0 =>
object(Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter)[151]
...
1 =>
object(Symfony\Component\Security\Core\Authorization\Voter\AuthenticatedVoter)[153]
...
2 =>
object(Symfony\Component\Security\Acl\Voter\AclVoter)[155]
...
private 'strategy' => string 'decideAffirmative' (length=17)
private 'allowIfAllAbstainDecisions' => boolean false
private 'allowIfEqualGrantedDeniedDecisions' => boolean true
private 'authenticationManager' =>
object(Symfony\Component\Security\Core\Authentication\AuthenticationProviderManager)[324]
private 'providers' =>
array
0 =>
object(Symfony\Component\Security\Core\Authentication\Provider\DaoAuthenticationProvider)[323]
...
1 =>
object(Symfony\Component\Security\Core\Authentication\Provider\AnonymousAuthenticationProvider)[149]
...
private 'eraseCredentials' => boolean true
private 'alwaysAuthenticate' => boolean false
क्या मुझे कुछ याद आ रही है?
धन्यवाद यह पूरी तरह से काम किया। मुझे अभी भी समझ में नहीं आता कि मेरा पहला उदाहरण उपयोगकर्ता ऑब्जेक्ट क्यों नहीं लौटा, लेकिन मुझे यह काम मिल गया, और मुझे लगता है कि एक ट्विग एक्सटेंशन वास्तव में एक क्लीनर दृष्टिकोण है। त्वरित उत्तर – n0xie
के लिए धन्यवाद ठीक है आप 'kernel.request' ईवेंट के लिए सुन रहे थे। प्रमाणन द्वारा संदर्भ टोकन सेट करना या सत्र से टोकन पढ़ने के बाद सभी 'kernel.request' श्रोताओं को प्रेषित किया जाता है। अगर आपने 'kernel.response' ईवेंट के लिए सुनी है तो आपको वांछित टोकन मिल जाएगा। अपने प्रश्न को गलत तरीके से मिटाने के लिए भी खेद है। यह मेरे लिए एक बुरा दिन है :)। –
यह समझ में आता है। स्पष्टीकरण के लिए धन्यवाद। आप हर रोज कुछ न कुछ सीखते हैं। – n0xie