एक फ़ील्ड को इंस्टेंट करना FormElementManager की ज़िम्मेदारी है। जब आप किसी प्रपत्र, फॉर्म तत्व या फ़ील्डसेट तक पहुंचने का प्रयास करते हैं, तो FormElementManager
जानता है कि कहां ढूंढना है और इसे कैसे बनाया जाए। ढांचे के Default Services खंड में यह व्यवहार गर्म हो गया।
के बाद से फार्म तत्वों तक पहुँचने का उचित तरीके से FormElementManager से उन्हें पुनर्प्राप्त कर रहा है, मैं एक BrandFieldsetFactory
बारे में इंजेक्षन करने के लिए कि डीबी अनुकूलक या आगे निर्भरता निर्माण पर fieldset के लिए इस लक्ष्य को हासिल करने के लिए होगा।
एक ZF3 अनुकूल fieldset कारखाना देखने की तरह होगा:
<?php
namespace Application\Form\Factory;
use Application\Form\BrandFieldset;
use Interop\Container\ContainerInterface;
class BrandFieldsetFactory
{
/**
* @return BrandFieldset
*/
public function __invoke(ContainerInterface $fem, $name, array $options = null)
{
// FormElementManager is child of AbstractPluginManager
// which makes it a ContainerInterface instance
$adapter = $fem->getServiceLocator()->get('Your\Db\Adapter');
return new BrandFieldset($adapter);
}
}
इस बिंदु पर, BrandFieldset
Zend\Form\Fieldset\Fieldset
का विस्तार करना चाहिए और यह के निर्माता ऐसी नज़र हो सकता है:
private $dbAdapter;
/**
* {@inheritdoc}
*/
public function __construct(My/Db/Adapter $db, $options = [])
{
$this->dbAdapter = $db;
return parent::__construct('brand-fieldset', $options);
}
अंत में, module.config.php
फ़ाइल मैं में इस कारखाने के बारे में FormElementManager
बताने के लिए कॉन्फ़िगरेशन है:
HINT:BrandFieldset::init()
विधि निर्माण के बाद FormElementManager द्वारा स्वचालित रूप से कॉल किया जाएगा। आप इस विधि में कोई पोस्ट-प्रारंभिक तर्क डाल सकते हैं।
क्या इसका उपयोग ZF2 में किया जा सकता है? मुझे इसे काम करने में परेशानी हो रही है। – Matt
निश्चित रूप से, फैक्टरी ZF2 दोस्ताना बनाने के बाद, इसे काम करना चाहिए। बस अन्य zf2 कारखानों की तरह कारखाने में एक createService() विधि जोड़ें और उस विधि से _invoke को कॉल करें। – edigu
मुझे यकीन नहीं है कि आपका क्या मतलब है। यदि मैं फ़ील्ड में $ db डंप करता हूं तो मुझे कक्षा का नाम मिलता है ("ब्रांडफील्डसेट")। ऐसा लगता है कि फैक्ट्री को कभी भी बुलाया नहीं जाता है (अगर मैं फैक्ट्री में बाहर निकलता हूं या वैर डंप खुश नहीं करता) – Matt