मैं इस कोड के बराबर और बहुत सारे नियंत्रक कार्यों में चल रहा हूं, मूल रूप से यह उपयोगकर्ता के उपयोगकर्ता नाम को पकड़ता है, और यदि वह उपयोगकर्ता नाम किसी ब्लॉग इकाई से जुड़ा हुआ है तो यह उपयोगकर्ता को अनुमति देगा ब्लॉग इकाई को देखने के लिए:Symfony2 सेवा में उपयोगकर्ता और सिद्धांत
$em = $this->getDoctrine()->getManager();
$user = $this->get('security.context')->getToken()->getUser();
$entities = $em->getRepository('MySiteBundle:Blog')->findBy(array('user' => $user));
return $this->render('MySiteBundle:Blog:index.html.twig', array(
'entities' => $entities,
मैं इसे एक सेवा में ले जाना चाहता हूं ताकि मैं कोड पुनरावृत्ति पर कटौती कर सकूं। मैं जितना संभव हो अपने नियंत्रकों में ज्यादा तर्क करने से बचना चाहता हूं।
कहा जा रहा है, मुझे यकीन नहीं है कि मैं सेवा में उपयोगकर्ता सत्र और सिद्धांत का उपयोग कैसे कर सकता हूं।
यहाँ मेरी services.yml है:
mysite.user.blog:
class: MySite\SiteBundle\Services\BlogUser
और यहाँ है कि कैसे मैं नियंत्रक में इसे कहते हैं प्रयास किया गया था:
public function testAction() {
$response = $this->get('mysite.user.blog');
return new Response($response);
}
मैं एक घटना subscriber/listener टैग का उपयोग कर प्रयास किया, लेकिन है कि 'नहीं करता है मैं चाहता हूं कि काम पूरा करने के लिए प्रतीत होता है।
यहां सेवा में मेरा पूरी तरह से भयानक प्रयास है। मुझे कन्स्ट्रक्टर का उपयोग किए बिना इससे कोई प्रतिक्रिया नहीं मिल सका।
namespace MySite\SiteBundle\Services;
use MySite\SiteBundle\Entity\Blog;
class BlogUser {
protected $entities;
public function __construct(){
$em = $this->getDoctrine()->getManager();
$user = $this->get('security.context')->getToken()->getUser();
$this->entities = $em->getRepository('MySiteBundle:Blog')->findBy(array('user' => $user));
}
}
क्या मैं इस बारे में पूरी तरह से गलत तरीके से जा रहा हूं? क्या कोई बेहतर तरीका है कि मैं याद कर रहा हूं?
संपादित करें/उत्तर:
संशोधित मेरी नामकरण परंपरा एक छोटे से:
//services.yml
mysite.user.blog.entities:
class: Mysite\SiteBundle\Services\BlogUser
arguments: ["@doctrine.orm.entity_manager", "@security.context"]
नियंत्रक कार्रवाई में:
$userEntities = $this->get('mysite.user.blog.entities');
$entities = $userEntities->getEntities();
सेवा को खुद में:
class BlogUser {
protected $entities;
public function __construct($em, $securityContext){
$user = $securityContext->getToken()->getUser();
$this->entities = $em->getRepository('MySiteBundle:Blog')->findBy(array('user' => $user));
}
public function getEntities(){
return $this->entities;
}
}
अभी भी जरूरत है नियंत्रक में $ entities चर प्राप्त करने के लिए दो पंक्तियां, लेकिन यह वही चीज़ को परिभाषित करने से बेहतर तरीका है।
के बाद के रूप में symfony v। 2.6 सुरक्षा संदर्भ को बहिष्कृत किया गया है: http://symfony.com/doc/current/book/security.html – 11mb