एक सामान्य समाधान के लिए पर उपलब्ध उपयोगकर्ता के प्रवेश बनाना चाहते kernel.controller
घटना इतनी तरह:
<service id="your_app.listener.before_controller" class="App\CoreBundle\EventListener\BeforeControllerListener" scope="request">
<tag name="kernel.event_listener" event="kernel.controller" method="onKernelController"/>
<argument type="service" id="security.context"/>
</service>
फिर अपनी BeforeControllerListener
आप नियंत्रक की जाँच करेगा कि क्या यह एक अंतरफलक को लागू करता है, अगर यह होता है, आप इंटरफ़ेस से एक विधि कॉल और सेकंड में पारित करेंगे देखने के लिए परिपक्वता संदर्भ।
<?php
namespace App\CoreBundle\EventListener;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use Symfony\Component\Security\Core\SecurityContextInterface;
use App\CoreBundle\Model\InitializableControllerInterface;
/**
* @author Matt Drollette <[email protected]>
*/
class BeforeControllerListener
{
protected $security_context;
public function __construct(SecurityContextInterface $security_context)
{
$this->security_context = $security_context;
}
public function onKernelController(FilterControllerEvent $event)
{
$controller = $event->getController();
if (!is_array($controller)) {
// not a object but a different kind of callable. Do nothing
return;
}
$controllerObject = $controller[0];
// skip initializing for exceptions
if ($controllerObject instanceof ExceptionController) {
return;
}
if ($controllerObject instanceof InitializableControllerInterface) {
// this method is the one that is part of the interface.
$controllerObject->initialize($event->getRequest(), $this->security_context);
}
}
}
फिर, किसी भी नियंत्रक कि आप उपयोगकर्ता हमेशा उपलब्ध तो जैसे उपयोगकर्ता है आप सिर्फ इतना है कि इंटरफ़ेस को लागू करेंगे और सेट करना चाहते हैं:
use App\CoreBundle\Model\InitializableControllerInterface;
class DefaultController implements InitializableControllerInterface
{
/**
* Current user.
*
* @var User
*/
private $user;
/**
* {@inheritdoc}
*/
public function initialize(Request $request, SecurityContextInterface $security_context)
{
$this->user = $security_context->getToken()->getUser();
}
// ....
}
इंटरफ़ेस
namespace App\CoreBundle\Model;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\SecurityContextInterface;
interface InitializableControllerInterface
{
public function initialize(Request $request, SecurityContextInterface $security_context);
}
से ज्यादा कुछ नहीं है
कोई रास्ता लिखने के लिए पता yaml में विन्यास? हम yaml का उपयोग करते हैं, और मुझे नहीं पता कि 'तर्क' कैसे जोड़ना है। मैंने इसे पढ़ा: http://symfony.com/doc/current/cookbook/service_container/event_listener.html साथ ही कोई सहायता नहीं – Toskan
@ टोस्कन आप बस कुछ ऐसा कर सकते हैं: 'तर्क: ["@em", "@ some_service "]' – takeit
app.listener.constructor_listener: वर्ग: AppBundle \ EventListener \ ConstructorListener गुंजाइश: अनुरोध तर्क: - {प्रकार: सेवा, आईडी: security.context} टैग: - {नाम: kernel.event_listener , घटना: kernel.controller, विधि: on कर्नेल नियंत्रक} http://pastebin.com/NTySb68a – r4ccoon