2011-07-27 14 views
5

मेरे पास एक मॉड्यूल है उदा। लेखा। निस्संदेह आपको एक फ़ाइल/acount/action.class.php नामक फ़ाइल मिल जाएगी।एकाधिक action.class.php

PHP-file action.class.php बड़ा हो रहा है। क्या इसे विस्तारित करना संभव है?

एक उदाहरण के लिए

:

/account/action/action.class.php 
/account/action/action2.class.php 

यदि यह संभव है, कैसे करता है action.class.php में और action2.class.php में की तरह कोड देखो? और/या कॉन्फ़िगर-यमल-फ़ाइल में मुझे कुछ कहां दर्ज करना चाहिए?

अग्रिम धन्यवाद!

Craphunter

+3

क्या आप एमवीसी पैटर्न का पालन कर रहे हैं? यदि आप हैं तो बहुत अधिक कोड के साथ समाप्त होने के लिए अजीब होगा। इस तरह की कई वर्ग फ़ाइलों में विभाजित करने के बजाय रिएक्टर। – Treffynnon

उत्तर

7

Symfony कार्यों दो रूपों में घोषित किया जा सकता है:

  1. एक बड़ा actios.class.php फ़ाइल कि sfActions से विरासत
  2. एकाधिक xxxAction.class.php फ़ाइल कि sfaction से विरासत

दोनों मूल रूप से वही हैं लेकिन इन्हें मिश्रित नहीं किया जा सकता है (आपको यह तय करना होगा कि क्या आप 123123 फाइलें, 1 प्रति क्रिया, या एक बड़ी वसा फ़ाइल चाहते हैं)।

यहां इस मामले पर सिम्फनी संदर्भ है: Symfony Front Controller - Actions कार्य अनुभाग की जांच करें।

+4

आपका लिंक पुराने 1.0 संस्करण के दस्तावेज़ों को इंगित करता है। सिम्फनी 1.4 के लिए लिंक यहां दिया गया है: http://www.symfony-project.org/gentle-introduction/1_4/en/06-Inside-the- नियंत्रक- लेयर#chapter_06_sub_alternative_action_class_syntax – Maerlyn

+0

धन्यवाद! यह बहुत मदद करता है! – craphunter

+0

@ मैरलीन मैंने अभी यूआरएल को ठीक करने के लिए इसे संपादित किया – guiman

1

पीएचपी सी # की तरह 'आंशिक वर्गों' का समर्थन नहीं करता।

  • एक विरासत श्रृंखला बनाएं, जिसका baseActions वर्ग जो sfAction से विरासत बनाने के द्वारा: तो आप दो विकल्प हैं। फिर MainActions कक्षा बनाएं जो baseActions से प्राप्त होती है। आप विरासत की विभिन्न परतों को जोड़ सकते हैं।

  • अलग वर्गों में समूह कार्य। अपनी क्रिया फ़ाइल में execute() फ़ंक्शन को ओवरराइड करें, और जिस श्रेणी की आपको आवश्यकता है उस पर फ़ंक्शन को मैन्युअल रूप से कॉल करें।

4

ऐसा लगता है कि एक्शन क्लास बहुत बड़ी हो रही है क्योंकि इसमें बहुत अधिक चीज़ें हैं। मैं इसे कई मॉड्यूल में तोड़ने या तर्क मॉडल के प्रासंगिक भागों को अपने मॉडल में स्थानांतरित करने का सुझाव दूंगा।

एक्शन 2 फ़ाइल के लिए एक जोड़ना शामिल नहीं है सिम्फनी 1.4 का उपयोग करने का इरादा नहीं है और संभवतः सभी प्रकार के अन्य सिरदर्द का कारण बन जाएगा।

1

भी विचार करता है, तो व्यवहार आप कार्रवाई (नियंत्रक) में लागू कर रहे हैं में से कुछ मॉडल (या देखें) के अंतर्गत आता है बजाय। यदि वास्तव में कार्रवाई से संबंधित है तो Guiman की सलाह का पालन करें और sfAction विरासत में प्रति वर्ग एक क्रिया बनाएं।

अगर मैं एक CRUD मॉड्यूल एक मॉडल (के रूप में CLI द्वारा उत्पन्न) पर आधारित है, और मुझे लगता है कि मॉडल के लिए अतिरिक्त व्यवहार को परिभाषित करने के लिए है, मैं एक और मॉड्यूल कि शामिल करने के लिए बनाने के लिए करते हैं व्यवहार। जैसे, मॉडलArticle पर विचार करते हुए। मैं articleमॉड्यूल सीआरयूडी व्यवहार (जेनरेट), article_support के लिए अतिरिक्त व्यवहार जैसे मॉडरेशन, सक्रियण इत्यादि और शायद article_ajax के लिए async अनुरोधों के लिए बना सकता है।