2012-05-04 5 views
5

के साथ कई पंजीकरण फार्म के निर्माण के लिए मैं इस ढांचे के साथ Symfony2 के लिए लेकिन पहले से ही प्यार में पूरी तरह से नया हूँ।Symfony2: कैसे FOSUserBundle

मेरे पास एक प्रोजेक्ट है जिसमें 3 अलग-अलग उपयोगकर्ता प्रकार होने की आवश्यकता है।

एक सुपर व्यवस्थापक, अन्य दो एक नियमित रूप से उपयोगकर्ताओं हो जाएगा लेकिन अलग प्रोफ़ाइल लेआउट के साथ किया जाएगा। प्रोफाइल के लिए अलग-अलग लेआउट का मतलब है कि उन दो उपयोगकर्ता प्रकारों के पंजीकरण फॉर्म में पंजीकरण के बाद आवेदन में विभिन्न फॉर्म फ़ील्ड और विभिन्न लेआउट होना चाहिए।

मैं मैं विचार (यदि वह ठीक बाद में हो जाएगा पता नहीं है) कैसे पंजीकरण के बाद उपयोगकर्ताओं को प्रबंधित करने पहुंच चुका है। लेकिन अभी के लिए मुझे समझ में नहीं आता कि दो अलग-अलग पंजीकरण फॉर्म कैसे बनाए जाएंगे जिन्हें FOSUserBundle से बढ़ाया जाएगा।

जहां तक ​​मैं समझता हूँ FOSUB विन्यास जहां पंजीकरण की स्थापना की है और कई "पंजीकरण:" नहीं हो सकता है में केवल एक ही बिंदु है:

fos_user: 
    db_driver: orm 
    firewall_name: main 
    user_class: Company\UserBundle\Entity\User 
    registration: 
     confirmation: { enabled: true } 

सुरक्षा

config.yml मेरे पास में .yml:

security: 
    encoders: 
     FOS\UserBundle\Model\UserInterface: sha512 

    main: 
     pattern: ^/ 
     form_login: 
      provider: fos_userbundle 
      csrf_provider: form.csrf_provider 
     logout:  true 
     anonymous: true 

मेरा विचार तीन अलग अलग बंडलों कि FOSUB फैली बनाने के लिए है, लेकिन प्रलेखन का कहना है कि केवल एक ही बंडल माता पिता के रूप FOSUB घोषणा कर सकते हैं।

(प्रलेखन से) एक अन्य विकल्प ContainerAware सभी मूल तरीकों को लागू करने का विस्तार करने के लिए है। लेकिन इस मामले में, मुझे यह नहीं पता कि मुझे ऐप/कॉन्फ़िगर/{config | security | routing} .yml को उदाहरण/register_employee,/register_manager लिंक के लिए कॉन्फ़िगर करना है जो FOSUB और मेरे कस्टम रूपों का उपयोग करेगा?

कृपया मुझे सही दिशा में इंगित करें। धन्यवाद।

उत्तर

4

FOSUserBundle उपयोगकर्ताओं के प्रमाणीकरण प्रदान करने के लिए नहीं बल्कि उपयोगकर्ताओं का प्रबंधन करने के लिए है। बंडल आपको अपने आवेदन के लिए उपयोगकर्ताओं को प्रबंधित करने के लिए एक बेहतर संरचना प्रदान करता है। यदि आप कोड को देखते हैं तो आपको नियंत्रक मिलेंगे जो डिफ़ॉल्ट पंजीकरण और अन्य उपयोगकर्ता गतिविधियों के लिए उपयोग किए जाते हैं।

आदर्श रूप में आप अपने खुद के नियंत्रक लिख सकते हैं और केवल दुकान में बंडल का इस्तेमाल करते हैं और उन प्राप्त करना चाहते हैं जाएगा। यह विशेष रूप से आवश्यक है जब आप एकाधिक पंजीकरण/लॉगिन फॉर्म प्रबंधित करना चाहते हैं।

बातें स्पष्ट प्रतीत एक बार आप उपयोगकर्ताओं को प्रबंधित करने FOSUserBundle पर विचार केवल और नहीं प्रमाणित करने के लिए/उन्हें रजिस्टर करने के लिए शुरू होगा।

आप https://github.com/sonata-project/SonataUserBundle पर भी देखना चाहते हैं, जो सोनाटाएडमिनबंडल और एफओएसयूसरबंडल के बीच एकीकरण प्रदान करता है।

+0

हां, मैंने पंजीकरण के लिए अपना स्वयं का संस्करण लागू किया है। यह केवल अन्य कार्यक्षमताओं के लिए उपयोगकर्ताओं को पंजीकृत करने के लिए है: अनुस्मारक, सक्रियण, ... मैं मानक FOSUB कार्यान्वयन का उपयोग करता हूं। –

5

हां यह करने योग्य हो सकता है। लेकिन यह एक जटिल प्रक्रिया होगी। आप (मैं हालांकि अपने आप की कोशिश की havn't :)) निम्न कर सकते हैं

  • /register/{type} की तरह एक मार्ग पैटर्न बना सकते हैं और तदनुसार registerAction संशोधित करते हैं। ओवरराइडिंग नियंत्रकों के लिए this दस्तावेज़ पर एक नज़र डालें।

  • registerAction विधि में User इकाई रिक्त बनाएं और मार्ग तर्क से प्रकार सेट करें। फिर $form->setData() पर कॉल करें, ई।जी [1]

  • OverrideRegistrationFormType एक ईवेंट श्रोता जोड़ने के लिए जो FormEvents::PRE_SET_DATA डेटा ईवेंट पर सुनेंगे। यहां आप प्रकार के आधार पर गतिशील रूप से फॉर्म फ़ील्ड जोड़ देंगे। this कुकबुक प्रविष्टि देखें।

  • अब सत्यापन भाग आता है। प्रत्येक उपयोगकर्ता प्रकार के लिए दो प्रकार के सत्यापन समूह बनाएं। आप सबमिट किए गए डेटा के आधार पर गतिशील रूप से सत्यापन समूह सेट कर सकते हैं। here देखें।

  • यदि आप फॉर्म सेव के दौरान अतिरिक्त ऑपरेशन करना चाहते हैं तो आप RegistrationFormHandler की विधि को ओवरराइड कर सकते हैं। ऐसा करने के लिए दस्तावेज़ के नीचे जांचें।

[1] इस तरह,

public function registerAction() 
{ 
    $form = $this->container->get('fos_user.registration.form'); 
    $user = new User(); 
    $form->setData($user); 
    //..... 
} 

संपादित करें:

तीसरा कदम काम नहीं करेगा। नियंत्रक कार्रवाई से प्रकार तर्क को पारित करने के लिए आपको processRegistrationFormHandler विधि को ओवरराइड करना होगा।

1

इस बंडल को https://github.com/PUGX/PUGXMultiUserBundle देखें। यह सभी कर्मचारियों को पंजीकरण के साथ कई प्रकार के उपयोगकर्ताओं के साथ काम करने की पेशकश करता है, जिनमें पंजीकरण