2015-02-24 12 views
5

मैं ऑब्जेक्ट उन्मुख फॉर्म जेनरेटर बनाने की कोशिश कर रहा हूं। कृपया ध्यान रखें कि इसका उपयोग केवल एक विशिष्ट समस्या को हल करने के लिए हमारी कंपनी के कुछ हद तक लोगों द्वारा किया जाएगा।PHP ऑब्जेक्ट उन्मुख फॉर्म जेनरेटर

मुझे वर्तमान में दो छोटी चेतावनियों का सामना करना पड़ रहा है।

बनाने तत्वों की सिंटेक्स

कुछ दृष्टिकोण मैं ले जा सकते हैं कर रहे हैं।

कन्स्ट्रक्टर में सबकुछ सेट करना। एक दोष के रूप में इस

Input::create('text', 'name', array('maxlength' => 10)); 

सीमा निर्माता असंगत निर्माता उपयोग होता टाइप करें और तरीकों (मास विशेषता की स्थापना के लिए एक विधि रखना)

Input::create('text')->name('name')->value('value')->attribute('max_length', 10); 

के रूप में हर विशेषता का पर्दाफाश के रूप में केवल सबसे अधिक इस्तेमाल किया विशेषताओं का पर्दाफाश करने के सकता है प्रत्येक विशेषता के लिए या __call जादू विधि के साथ विधि बनाने के साथ विधि जिसके परिणामस्वरूप आईडीई में कोई स्वत: पूर्ण समर्थन नहीं होगा। और अब भी, मैं attribute विधि रख सकता हूं।

Input::create()->type('text')->name('name')->value('value')->max_length(10)->id('id'); //etc. 

फिलहाल, मैं दूसरा दृष्टिकोण सबसे अच्छा मानता हूं, क्योंकि यह दोनों दुनिया से "अच्छी" सामग्री रखता है। जैसा कि अभी भी कुछ कामों को अमूर्त करने का एक तरीका प्रदान करता है, उदाहरण के बाद से विधि required न केवल आवश्यक विशेषता सेट करेगी, बल्कि आवश्यकतानुसार सत्यापन ऑब्जेक्ट के लिए इस फ़ील्ड को भी चिह्नित करेगी। दृष्टिकोण 2 के साथ

कोड दोहराव और 3

के बाद से वहाँ विशेषताओं है कि हर तत्व द्वारा किया जा सकता है, लेकिन यह भी जिम्मेदार बताते हैं कि केवल 3 या 4 तत्वों, उदा प्रयोग करने योग्य हैं एचटीएमएल 5 विशेषता form

प्रत्येक तत्व मूल तत्व से प्राप्त हो सकता है जिसमें प्रत्येक तत्व के लिए सार्वभौमिक गुणों के लिए विधियां हैं (उदा। name)। आंशिक रूप से उपयोग करने योग्य विशेषताओं को इंटरफेस के साथ हल किया जा सकता है, लेकिन इससे कोड डुप्लिकेशन होता है क्योंकि उनमें विधि निकाय नहीं हो सकता है।

लक्षण समाधान होंगे, लेकिन दुख की बात है, मैं PHP 5.3 पर फंस गया हूं, अपग्रेड करने के लिए कोई रास्ता नहीं है। यह मुझे या तो मिक्सिन या संरचना पैटर्न को कार्यान्वित करने के साथ छोड़ देता है, जो फिर से, कोई स्वत: पूर्ण समर्थन नहीं ले सकता है। दूसरे दृष्टिकोण का उपयोग करते समय इसे आंशिक रूप से कम किया जाएगा।

मेरे वास्तविक सवाल का तो:

किस तरीके के रूप में सबसे उपयुक्त समाप्त कर सकते हैं? (न्यूनतम कोड डुप्लिकेशन, ठोस कोड पुन: उपयोग और कार्यान्वयन की आसानता के रूप में उपयुक्त)

मुझे एहसास है कि यह बहुत अच्छी तरह से विचार आधारित उत्तर हो सकता है, इसलिए अगर मैं ऐसा करता हूं तो मैं पहले से माफ़ी मांगता हूं।

+0

है 'इनपुट ::()' सिर्फ एक असली "इनपुट वस्तुओं" बनाने के लिए कारखाना विधि बनाने? मैं उलझन में आया क्योंकि आपने कुछ बार कन्स्ट्रक्टर का उल्लेख किया था, लेकिन कभी भी आपके कन्स्ट्रक्टर को नहीं दिखाया। इसके अलावा आपकी विरासत की समस्या के लिए सार वर्ग भी हैं। उनके पास एक विधि निकाय हो सकता है और शरीर के बिना अमूर्त तरीकों को परिभाषित करके अपने बच्चों को कार्यान्वयन विवरण भी दे सकता है। – thpl

+0

इनपुट :: बनाएँ() एक स्टैंडअलोन इनपुट ऑब्जेक्ट बनाता है, लेकिन एकाधिक तत्व, उदा। Textarea, बटन अलग कन्स्ट्रक्टर पैरामीटर होगा। जैसा कि मैंने कहा था, प्रत्येक तत्व आधार तत्व (अमूर्त वर्ग) से प्राप्त कर सकता है, लेकिन हम एकाधिक आधार तत्वों का उपयोग करते समय एकल विरासत के बारे में बात कर रहे हैं और इस प्रकार कोड डुप्लिकेशंस (क्योंकि मुझे ऐसे गुण नहीं चाहिए जिन्हें केवल टेक्स्टरेरा में इनपुट के लिए सेट किया जा सके)। इंटरफेस के साथ कई आधार तत्वों का उपयोग करने से भी नकल हो जाएगी। – realshadow

+0

कभी भी यह देखने पर विचार किया गया कि https://github.com/naomik/htmlgen जैसे पहले से क्या है? – Tschallacka

उत्तर

0

आईएमओ मैं दूसरे विकल्प के लिए जाऊंगा। शायद क्योंकि यह मुझे jQuery की याद दिलाता है।

Input::create('text')->name('name')->value('value')->attribute('max_length', 10); 

'नाम', 'मान', एक अंतरफलक वर्ग 'FormElements' में 'विशेषता' की तरह अधिक सामान्य क्षेत्रों को परिभाषित करें और लागू/विस्तार है कि कक्षाओं 'इनपुट' में, 'चुनें' आदि

हालांकि मैं व्यक्तिगत रूप से उस दूसरे विकल्प को पसंद करता हूं .. पॉल के विदेशी शब्दों में "कभी-कभी आपको पासा रोल करना होगा"।

1

मुझे पता है यह एक पुराने सवाल है, लेकिन टिप्पणी में किसी एक परियोजना है कि मैं naomik/htmlgen बुलाया आपके द्वारा बनाई गई उल्लेख। मैं यहां कुछ समर्थन के साथ चिंतन कर रहा हूं क्योंकि मैंने हाल ही में एक नया संस्करण 2.x जारी किया है जो PHP में HTML पीढ़ी को काफी सुखद बनाता है।

use function htmlgen\html as h; 
echo h('input', ['name'=>'catQty', 'value'=>500]) 

रेंडर करेगा

<input name="catQty" value="500"> 

हालांकि, कि उदाहरण मुश्किल से संभावित

h('#wrapper', 
    h('h1.title', 'Hello, World'), 
    h('p', 
    h('comment', 'link to project'), 
    h('a', ['href'=>'https://github.com/naomik/htmlgen'], 'See htmlgen on Github') 
) 
); 

यहाँ के मामले में सतह खरोंच है उत्पादन है (वास्तविक उत्पादन खाली स्थान के पास नहीं है)

<div id="wrapper"> 
    <h1 class="title">Hello, World</h1> 
    <p> 
    <!-- link to project --> 
    <a href="https://github.com/naomik/htmlgen">See htmlgen on Github</a> 
    </p> 
</div> 

यह डेटा

use function htmlgen\html as h; 
use function htmlgen\map; 

$links = [ 
    'home' => '/', 
    'cats' => '/cats', 
    'milk' => '/milk', 
    'honey' => '/honey', 
    'donuts' => '/donuts', 
    'bees' => '/bees' 
]; 

echo h('nav', 
    h('ul', 
    map($links, function($href, $text) { return 
     h('li', 
     h('a', ['href'=>$href], $text) 
    ); 
    }) 
) 
); 

चाहेंगे उत्पादन के संग्रह प्रतिपादन में भी बहुत आसान है (फिर से, खाली स्थान के यहाँ सिर्फ प्रदर्शन के लिए है)

<nav> 
    <ul> 
    <li><a href="/">home</a></li> 
    <li><a href="/cats">cats</a></li> 
    <li><a href="/milk">milk</a></li> 
    <li><a href="/honey">honey</a></li> 
    <li><a href="/donuts">donuts</a></li> 
    <li><a href="/bees">bees</a></li> 
    </ul> 
</nav> 

यह सब 100% PHP और कोई कस्टम, मालिकाना अजीब व्यापार है। यह बेहद अभिव्यक्तिपूर्ण है और खुद को महान रचनाओं के लिए उधार देता है। आप अपने टेम्पलेट को आसानी से उपयोग करने वाले कार्यों या require कॉल में तोड़ सकते हैं।

चेक बाहर और अधिक शांत सुझावों के लिए examples

संबंधित मुद्दे