2012-11-29 24 views
6

के साथ ZfcUser को विस्तारित करना हाय मैं Zend Framwork 2 के लिए ZfcUser मॉड्यूल का उपयोग करके उपयोगकर्ता पंजीकरण फ़ॉर्म लिखने की कोशिश कर रहा हूं और अधिक उपयोगकर्ता फ़ील्ड जोड़ते समय सर्वोत्तम प्रथाओं पर कुछ सलाह चाहूंगा।ज़ेंड फ्रेमवर्क 2

अब तक मैंने अपना खुद का मॉड्यूल "WbxUser" नामक बनाया है और जैसा कि modules wiki pages में उल्लिखित है, मैंने अपने मॉड्यूल बूटस्ट्रैप फ़ंक्शन में इवेंट मैनेजर का उपयोग कर ZfcUser के पंजीकरण फ़ॉर्म में "userlastname" नामक एक कस्टम फ़ील्ड जोड़ा है।

कोड:

//WbxUser.Module.php 

namespace WbxUser; 

use Zend\Mvc\MvcEvent; 


class Module { 
    public function onBootstrap(MvcEvent $e){ 
     $events = $e->getApplication()->getEventManager()->getSharedManager(); 
     $events->attach('ZfcUser\Form\Register','init', function($e) { 
      $form = $e->getTarget(); 
      $form->add(array(
        'name' => 'userlastname', 
        'attributes' => array(
          'type' => 'text', 
        ), 
        'options' => array(
          'label' => 'Last Name', 
        ), 
      )); 
      // Do what you please with the form instance ($form) 
     }); 

     $events->attach('ZfcUser\Form\RegisterFilter','init', function($e) { 
      $filter = $e->getTarget(); 

      $filter->add(array(
       'name'  => 'userlastname', 
       'required' => true, 
       'filters' => array(
         array('name' => 'StripTags'), 
         array('name' => 'StringTrim'), 
       ), 
       'validators' => array(
        array(
         'name' => 'StringLength', 
         'options' => array(
          'min' => 3, 
          'max' => 255, 
         ), 
        ), 
       ), 
      )); 
     }); 
    } 

    public function getConfig(){ 
     return array(); 
    } 

    public function getAutoloaderConfig(){ 
     return array(); 
    } 
} 

लेकिन यह मैं थोड़ा जहां/अतिरिक्त डेटा है कि अपने नए क्षेत्रों जमा हो रहे हैं बचाने के लिए कोड लिखने के लिए कैसे पर खो दिया है मिल गया है के बाद।

  1. इस घटना जहां मैं अतिरिक्त फ़ील्ड https://github.com/ZF-Commons/ZfcUser/wiki/How-to-perform-a-custom-action-when-a-new-user-account-is-created

  2. के लिए दिनचर्या को बचाने बंद सक्रिय कर सकता है मैं अपने खुद के WbxUser मॉडल लेखन होना चाहिए कि ZfcUser \ इकाई \ User.php अपने नए क्षेत्रों को जोड़ने के लिए प्रदान करता है

मैं एक ज़ेडएफ और एमवीसी नोब का थोड़ा सा हूं, इसलिए लिखने की दिशा में एक झुकाव के लिए बहुत अच्छा होगा।

+1

आप इस पोस्ट को देख सकते हैं: http://stackoverflow.com/questions/8783873/zf2-whats-the-best-practice-for-working-with-vendor-modules-form-classes – nXqd

+2

बहुत बढ़िया वह मदद करता है। मेरे मॉड्यूल को लिखने में मुझे एक दरार होगी और मैं पोस्ट करूंगा जो मेरे लिए काम करता है। एक बार फिर धन्यवाद। –

+0

धन्यवाद, मैं तुम्हारा देखने की उम्मीद कर रहा हूं। मैं एक ही चीज़ पर काम कर रहा हूं :) – nXqd

उत्तर

4

यह एक थोड़ा अधिक सहज ज्ञान युक्त

http://juriansluiman.nl/en/article/117/use-3rd-party-modules-in-zend-framework-2

+0

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

+1

मेरे पास इस पर एक त्वरित मार्गदर्शिका है थियो: http://circlical.com/blog/2013/4/1/l5wftnf3p7oks5561bohmb9vkpasp6 शायद यह मदद करता है – Saeven

0

एक तीसरी पार्टी मॉड्यूल फेरबदल वास्तव में मेरे लिए अपील नहीं है क्योंकि कई बार यह कार्यक्षमता का एक बहुत अस्तव्यस्त हो रहा है। मैं हमेशा मॉड्यूल के बाहर कुछ करने का प्रयास करता हूं क्योंकि यदि मॉड्यूल में कोई अपडेट है तो मैं आसानी से किसी भी चीज़ को फिर से लिखने के बिना अपने आवेदन में शामिल करता हूं।

ऐसा करने के लिए आप ऐसा करने की कोशिश कर रहे हैं, मैं अपने आवेदन में एक और टेबल बनाउंगा और एक विदेशी कुंजी जो zfcuser तालिका का विस्तार करेगी, इस तरह से मैं अपने आवेदन में प्रत्येक zf2user को जानकारी को जोड़ सकता हूं।

यह सिर्फ एक सुझाव है क्योंकि मैं zf2 में भी नया हूं।

1

आप मॉड्यूल कॉन्फ़िगरेशन को ओवरराइड कर सकते हैं। Autoload फ़ोल्डर में zfcuser.global.php.dist का उपयोग करने का सबसे शानदार तरीका है। इस फ़ाइल को अपने एप्लिकेशन ऑटोलोड लोड फ़ोल्डर में कॉपी करें और फ़ाइल नाम को zfcuser.global.php में बदलें। यहां आप जो भी विकल्प यहां पा सकते हैं उसे बदलने में सक्षम हैं। इस विकल्प का उपयोग zfcUser इकाई को ओवरराइड करने के लिए किया जा सकता है: 'user_entity_class' => 'ZfcUser \ Entity \ User'।

फिर फिर, आप खुद को ऐसी स्थिति में पा सकते हैं जहां आपको उन चीजों को बदलने की आवश्यकता है जिन्हें कॉन्फ़िगरेशन फ़ाइल में बदला नहीं जा सकता है। इस मामले में आप अपना खुद का यूजर मॉड्यूल बना सकते हैं (जब तक आप इस बारे में सुनिश्चित नहीं हैं कि आप कौन सी फाइलों को प्रतिस्थापित करना चाहते हैं, तो आप केवल पूरे zfcuser मॉड्यूल को क्लोन करना चाहते हैं।

उपयोगकर्ता मॉड्यूल क्लोन करने के बाद (और तदनुसार नामस्थान बदल दिया) application.config.php करने के लिए अपने मॉड्यूल जोड़ने सुनिश्चित करें कि आपके मॉड्यूल zfcuser के बाद लोड किया जाता है सुनिश्चित करें या वैकल्पिक रूप से आप कॉन्फ़िग फ़ाइल से zfcuser को दूर कर सकता है और module.php में निम्नलिखित डाल:।।

public function init($moduleManager) 
{ 
    $moduleManager->loadModule('ZfcUser'); 
} 

अब आप ZfcUser ओवरराइड कर सकते हैं मॉड्यूल कॉन्फ़िगरेशन। टेम्पलेट फ़ोल्डर और UserController को ओवरराइड करने के लिए निम्न स्निपेट का उपयोग किया जा सकता है।

<?php 

// Note most routes are managed in zfcUser config file. 
// All settings here either overrides or extend that functionality. 

return array(
    'view_manager' => array(
     'template_path_stack' => array(
      // 'zfcuser' => __DIR__ . '/../view', Override template path   
     ), 
     'template_map' => array(
      // You may want to use templates from the original module without having to copy - paste all of them. 
     ), 
    ), 

    'controllers' => array(
     'invokables' => array(
      // 'zfcuser' => 'YourModule\Controller\IndexController', // Override ZfcUser controller. 
     ), 
    ), 

    'router' => array(
     'routes' => array(
      'zfcuser' => array(
       'type' => 'Literal', 
       'priority' => 2500, 
       'options' => array(
        'route' => '/user', 
        'defaults' => array(

         // Use original ZfcUser controller. 
         // It may be a good idea to use original code where possible 

         'controller' => 'ZfcUser\Controller\UserController', 
         'action'  => 'index', 
        ), 
       ), 
       'may_terminate' => true, 
       'child_routes' => array(

        'authenticate' => array(
         'type' => 'Literal', 
         'options' => array(
          'route' => '/authenticate', 
          'defaults' => array(

           // Invoke YourModule\Controller\IndexController 

           'controller' => 'zfcuser', 
           'action'  => 'authenticate', 
          ), 
         ), 
        ),   
       ), 
      ), 
     ), 
    ), 
); 

इसके अलावा आप module.php में ZfcUser सेवाओं को ओवरराइड कर सकते हैं। ;-)