युक्तियाँ और चालें CakePHP

उन लोगों के लिए जो पहले से ही ढांचे से परिचित होने में कामयाब रहे हैं।





लचीला संबंध प्रबंधन



डिफ़ॉल्ट रूप से, जब किसी मॉडल के सभी प्रतिनिधियों की खोज होती है, तो केक इससे जुड़े सभी सबमॉडल्स की खोज करता है। जो अक्सर असुविधाजनक होता है, क्योंकि अनुरोधों की संख्या नाटकीय रूप से बढ़ जाती है, क्योंकि बेकार जानकारी की संख्या। यह, निश्चित रूप से, मानक साधनों द्वारा हल किया जा सकता है, जैसे कि $ यह-> पुनरावर्ती, आवश्यक खोज संख्याओं की संख्या में (डिफ़ॉल्ट रूप से 3 तक), लेकिन यह अक्सर या तो मदद नहीं करता है, क्योंकि ऐसा होता है कि कुछ सबमॉडल की जरूरत है, लेकिन सभी नहीं। इस मामले में, सुविधाजनक अपेक्षा समारोह, जो सीधे मॉडल में काम करता है, मदद करेगा।

निर्देश मैनुअल

इसका उपयोग करना बहुत सुविधाजनक है।

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

$ यह-> पोस्ट-> लेखक-> उम्मीदें ();

$ यह-> पोस्ट-> श्रेणी-> उम्मीदें ();

$ यह-> पोस्ट-> पोस्टडेटेल-> एक्सपेक्ट्स (सरणी ('पोस्टएक्स्टेंडडेल', 'पोस्टएटचमेंट'));





और आप तुरंत इसे पसंद कर सकते हैं:

$ यह-> पोस्ट-> उम्मीदें ('लेखक। अथोर', 'श्रेणी। श्रेणी')

'PostDetail.PostExtendedDetail', 'PostDetail.PostAttachment');



टैग मेघ



यह एक तुच्छ कार्य प्रतीत होगा। चलिए इसे CakePHP के संदर्भ में बनाने की कोशिश करते हैं।

यह स्पष्ट है कि एक टैग क्लाउड (उदाहरण के लिए, टैगक्लाउड) को टैग नियंत्रक की एक कार्रवाई के रूप में मौजूद होना चाहिए, बाद वाला भविष्य में अन्य कार्यों का प्रदर्शन करेगा। दूसरी ओर, इस क्रिया का कोई मानक दृष्टिकोण नहीं है, क्योंकि यह पूरे पृष्ठ का लेआउट है। यानी वैश्विक दृश्य।

यहां तत्व की अवधारणा हमारी मदद करेगी। एक तत्व एक दृश्य है जिसे पृष्ठ से पृष्ठ पर, अक्सर लेआउट में कहा जाता है। हमें क्या चाहिए। इसलिए, तत्व फ़ोल्डर में, टेक्स्ट के साथ एक tagcloud.ctp टेम्पलेट बनाएं:

$ टैग = $ यह-> अनुरोध ('टैग / क्लाउड');



इस प्रकार हमें एक टैग मिला है और उसी टेम्पलेट में अब हम आपकी इच्छानुसार क्लाउड को लैस कर सकते हैं;)



अब लेआउट / default.thtml पर जाएं और पृष्ठ पर आवश्यक स्थान पर निम्नलिखित पंक्ति डालें:

इको $ इस-> रेंडरएमेंट ('टैगक्लाउड');



वह सब है। अब टैग क्लाउड वाला हमारा टेम्प्लेट छपा होगा;)

केकपीएचपी 1.2 में कैश



हाँ, यह अविश्वसनीय है! CakePHP के नवीनतम संस्करण में, कैशिंग आसान नहीं था, लेकिन बहुत सरल था! वर्तमान में समर्थित: APC, फ़ाइल, मेमाशे, मॉडल और XCache। सबसे सरल और सबसे सुविधाजनक फ़ाइल है। यह सरल है, निर्दिष्ट नाम के साथ एक फ़ाइल tmp फ़ोल्डर में बनाई गई है। इसके अलावा, अपने स्वयं के कैशिंग सिस्टम के निर्माण का समर्थन किया जाता है।

तो, कैशे को सक्रिय करें। इसके लिए, core.php की सेटिंग वाली फाइल में हम लिखते हैं:

$ केकचे = सरणी ('फाइल');



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

$ केकचे = सरणी ('मेमेचे');



याद रखें कि Memcached स्थापित होना चाहिए! विंडोज पर प्रयोगों के लिए, आप इस संस्करण को स्थापित कर सकते हैं।

आगे यह अभी भी आसान है! कैशिंग सिस्टम के नाम के बावजूद, हम नियंत्रक में निम्नलिखित कमांड का उपयोग करते हैं:

कैश :: लिखना ($ कुंजी, $ डेटा, '+1 सप्ताह');



पढ़ने के लिए

कैश :: पढ़ा ($ कुंजी);



यदि इस तरह की कुंजी पहले से कैश में नहीं है, तो रिटर्न गलत पढ़ें:

$ उपयोगकर्ता = कैश :: पढ़ने ($ कुंजी);

अगर ($ उपयोगकर्ता === असत्य) {

$ उपयोगकर्ता = $ यह-> उपयोगकर्ता-> findAll ();

कैश :: लिखना ($ कुंजी, $ उपयोगकर्ता);

}



हटाने या पूर्ण सफाई:

कैश :: हटाएं ($ कुंजी);

कैश :: स्पष्ट ();



केकपीएचपी 1.2 वैलिडेशन



मान्यता भी आसान हो गई है। कुछ विशिष्ट मामलों के लिए अब नियमित अभिव्यक्ति का उपयोग करना आवश्यक नहीं है।

सत्यापन नियमों का सामान्य दृष्टिकोण निम्नानुसार है:

var $ मान्य = सरणी ('फ़ील्ड' => सरणी ('नियम' => सरणी ('सत्यापन', 'परम 1', 'परम 2')));



उदाहरण के लिए, संख्याएँ और संख्याएँ:

var $ मान्य = सरणी ('उपयोगकर्ता नाम' => सरणी ('नियम' => सरणी ('AlphaNumeric')));



खेत की लंबाई

var $ मान्य = सरणी ('उपयोगकर्ता नाम' => सरणी ('नियम' => सरणी ('बीच, 3, 10)));



एक संख्या या शब्द के साथ तुलना:

var $ मान्य = सरणी ('आयु' => सरणी ('नियम' => सरणी ('तुलना', 'अधिक या बराबर', 18)));



तारीख:

var $ मान्य = सरणी ('startdate' => array ('नियम' => array ('date', 'ymd')));



सत्यापन को विस्तारित करने के लिए नियम को समान नियमों की एक सरणी में बदल दिया जा सकता है।

नियमों के बारे में यहाँ पढ़ें

अजाक्स पेजिनेशन 1.2



1.2 अजाक्स का उपयोग करके पृष्ठांकन के लिए अंतर्निहित समर्थन। कुछ नियंत्रक की कार्रवाई के लिए उदाहरण पर विचार करें:

$ यह-> पेजेट ['उपयोगकर्ता'] = सरणी ('सीमा' => 10);

$ रिकॉर्ड = $ इस-> पेजेट ('उपयोगकर्ता');

$ यह-> सेट ('रिकॉर्ड', $ रिकॉर्ड);

$ params ['url'] = $ id;

$ यह-> सेट ('पेजिनेटर_परम', $ परम);



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

देखने में, ऐसा करें:

<? php $ paginator-> विकल्प (सरणी ('अद्यतन' => 'टिप्पणी-सामग्री'), 'संकेतक' =>

'सूचना')); ?>

नेविगेशन :

<? php प्रतिध्वनि $ paginator-> prev ('<< पिछला', (isset ($ paginator -par))

? $ paginator_params: null), null, array ('class' => 'विकलांग')); ?>



<? php प्रतिध्वनि $ paginator-> अगला ('अगला >>'), (isset ($ paginator_parent))?

$ paginator_params: null), null, array ('class' => 'विकलांग')); ?>

परिणाम पृष्ठों:

<; php इको $ पेजिनेटर-> काउंटर (सरणी ('विभाजक' => 'का'));



दरअसल, बस इतना ही। आपको केवल HTML टिप्पणी-सामग्री तत्व बनाने की आवश्यकता है, जिसे नए पेजेशन पेज के साथ अपडेट किया जाएगा।

रूसी के रूप में महीने



$ फॉर्म-> महीना ('मॉडल') डिफ़ॉल्ट रूप से अंग्रेजी में महीनों को प्रदर्शित करता है। महीनों को लोकेल से लिया जाता है, क्योंकि रूसी संस्करण को प्रदर्शित करने के लिए आपको ऐसा कुछ करने की आवश्यकता होती है:

setlocale (LC_TIME, 'rus');



नोट: विंडोज पर यह विकल्प CP1251 एन्कोडिंग को देगा। इसलिए, यदि आपके पास UTF-8 साइट है, तो आपके पास सर्वर ru_RU.UTF8 (लिनक्स उपयोगकर्ता, हैलो!) पर या तो एक लोकेल होना चाहिए, या आइकनव का उपयोग करके इस $ फॉर्म-> महीने को परिवर्तित करें। या अपना खुद का $ फॉर्म बनाएं-> चयन;)



PS जल्द ही CakePHP के आधार पर एक सामाजिक नेटवर्क खोलने की योजना बनाई गई है, क्योंकि यह एक ब्लॉग खोलना संभव है जो इस ढांचे पर विकास से संबंधित हर चीज के बारे में लिखेगा।



All Articles