के लिए एकाधिक इकाई प्रबंधक सिम्फनी में यूआरएल के आधार पर अलग-अलग इकाई प्रबंधक/कनेक्शन का उपयोग करने के लिए काफी आसान है। निम्नलिखित रूटिंग कॉन्फ़िगरेशनFOSUserBundle
connection:
pattern: /a/{connection}
defaults: { _controller: AcmeTestBundle:User:index }
और निम्न कुकबुक से;
How to work with Multiple Entity Managers and Connections
मेरे नियंत्रक कुछ इस तरह दिखाई होगा,
class UserController extends Controller
{
public function indexAction($connection)
{
$products = $this->get('doctrine')
->getRepository('AcmeStoreBundle:Product', $connection)
->findAll()
;
..................
और मैं विभिन्न एम/कनेक्शन/डेटाबेस से उत्पाद जानकारी प्राप्त करने में सक्षम हूं।
अब, अगर मैं अपने रूटिंग में ऐसा कुछ जोड़ता हूं;
login:
pattern: /a/{connection}/login
defaults: { _controller: FOSUserBundle:Security:login }
कैसे मैं आसानी से के रूप में कनेक्शन चर में परिभाषित लॉगिन कनेक्शन का उपयोग करने के लिए कर सकते हैं?
यह सेटअप मानता है कि प्रत्येक डेटाबेस की अपनी उपयोगकर्ता लॉगिन जानकारी (fos_user तालिका) होती है।
संपादित करें: अपडेट किया गया रूटिंग जानकारी
EDIT2:
मैं हालांकि PHP/Symfony/सिद्धांत के साथ नए अभी भी हूँ, इसलिए कृपया मुझे माफ कर अगर मैं यहाँ पूरी तरह से गलत हूँ। मैंने FOS \ UserBundle \ Doctrine \ UserManager पर मैन्युअल रूप से कनेक्शन सेट करने का प्रयास किया। निम्नलिखित वर्ग
//
use Doctrine\Common\Persistence\ObjectManager;
//
public function __construct(EncoderFactoryInterface $encoderFactory, CanonicalizerInterface $usernameCanonicalizer, CanonicalizerInterface $emailCanonicalizer, ObjectManager $om, $class)
{
parent::__construct($encoderFactory, $usernameCanonicalizer, $emailCanonicalizer);
$this->objectManager = $om;
$this->repository = $om->getRepository($class);
$metadata = $om->getClassMetadata($class);
$this->class = $metadata->getName();
}
के निर्माता एक नियंत्रक में है, तो हम निम्न विधि 'परीक्षण'
$em = $this->get('doctrine')->getManager('testing');
$repository = $this->get('doctrine')->getRepository($class, 'testing')
कि के लिए करने के लिए उन्हें बदलने के लिए मैं कोड बदल के लिए निम्न का उपयोग कर सकते ObjectManager के बजाय EntityManager का उपयोग करें।
//
//use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\ORM\EntityManager;
//
public function __construct(EncoderFactoryInterface $encoderFactory, CanonicalizerInterface $usernameCanonicalizer, CanonicalizerInterface $emailCanonicalizer, EntityManager $om, $class)
{
parent::__construct($encoderFactory, $usernameCanonicalizer, $emailCanonicalizer);
$this->objectManager = $om;
$this->repository = $om->getRepository($class);
$metadata = $om->getClassMetadata($class);
$this->class = $metadata->getName();
}
मेरा ऐप कोई त्रुटि के साथ ठीक काम करता है।
जिस तरह से यह नियंत्रक के साथ काम करता है, मैंने इस लाइन में पैरामीटर जोड़कर कनेक्शन बदलने की कोशिश की, लेकिन यह अभी भी डिफ़ॉल्ट कनेक्शन का उपयोग कर रहा है।
$this->repository = $om->getRepository($class, 'testing');
मैं और क्या खो सकता हूं?
मुझे नहीं लगता कि FOSUserBundle को ऐसा करने के लिए डिज़ाइन किया गया है। आप या तो प्रोजेक्ट में योगदान करके या कांटा बनाकर कार्यक्षमता बढ़ा सकते हैं। या आप अलग-अलग कनेक्शन के लिए समर्थन के साथ अपना खुद का उपयोगकर्ता बंडल लिख सकते हैं। – Sgoettschkes
@Sgoettschkes: मैं पूरी तरह से आपसे सहमत हूं। मैं अभी तक अपनी समस्या के समाधान/समाधान खोजने में सक्षम नहीं हूं, लेकिन जब मैं करता हूं, तो मुझे यकीन है कि अगर यह जिथूब पर पुल अनुरोध द्वारा नहीं किया गया है तो मुझे यह साझा करना होगा :) –
क्या आपने उचित ऑब्जेक्ट मैनेजर को इंजेक्शन दिया है UserManager क्लास कन्स्ट्रक्टर (परीक्षण एक)? –