2009-11-12 13 views
8

मैं केकेपीएचपी 1.2 का उपयोग कर रहा हूं और मैं सोच रहा हूं कि क्या इस पक्ष को $ - इस डेटा को नियंत्रक से देखने के लिए प्रभावित करने पर कोई पक्ष प्रभावित होता है।

पूर्व:

// inside PostsController, I have this code: 
$this->data['Posts'] = $this->Post->find('all'); 

के बजाय:

$posts = $this->Post->find('all'); 
$this->set(compact('posts')); 

// inside the /posts/view, I access it like this: 
<?php foreach ($this->data['Posts'] as $post) {....};?> 

ऐसा करने से, मैं $ this-> set() नियंत्रक से सभी को एक साथ छोड़ दिया। क्या यह किसी भी एमवीसी पैटर्न या किसी भी सुरक्षा समस्या का उल्लंघन करता है जिसे मैंने अनदेखा किया हो सकता है? मैंने देखा कि ऑथ घटक का उपयोग करके, $-- डेटा में [_Token] सरणी है।

धन्यवाद

उत्तर

14

आपको केक हेल्पर्स स्वचालित रूप से डेटा की तलाश करने वाले विभिन्न स्थानों से अवगत होना चाहिए, क्योंकि इससे वास्तविक अंतर होता है। फॉर्म हेल्पर $this->data की सामग्री के आधार पर स्वचालित रूप से फ़ील्ड भर देगा। प्रमाणीकरण विफल होने पर इस तरह का डेटा डेटा बनी रहती है। ओटीओएच, <select> तत्व विकल्प सरणी स्वचालित रूप से बहुवचन फ़ील्ड नाम से लिया जाता है,
उदा। $form->select('Model.foo_id') सेट होने पर $foos से अपने विकल्प ले जाएगा।

इस प्रकार, $this->data में इसकी विशेष जगह है और इसे हल्के ढंग से उपयोग नहीं किया जाना चाहिए, जैसे कि नामित चर के उपयोग का उपयोग किया जाना चाहिए और इसे अनदेखा नहीं किया जाना चाहिए। उपयुक्त दोनों का प्रयोग करें। यदि आप फॉर्म हेल्पर सामग्री को स्वत: सेट नहीं करना चाहते हैं, तो set() अपने चर। IMHO यह एक वैरिएबल नाम असाइन करने के लिए और भी पठनीय है जो इसमें मौजूद डेटा पर संकेत देता है। $this->data पर चल रहे आपके सभी विचार $foo पर चल रहे एक दृश्य से कम स्पष्ट हैं और दूसरा $bar पर है।

3

$controller->data डेटा दृश्य फ़ाइल से नियंत्रित करने के लिए तैनात के लिए है।

$view->data सामान्य डेटा के लिए है।

मैं खुद को सचेत रखने के लिए इसे करने से बचूंगा। इसके अलावा आप अधिक ध्यान में टाइप कर रहे हैं।

+1

मैं फंकी Dude से सहमत - $ this-> डेटा, जहां $ इस एक मॉडल, नियंत्रक, दृश्य या अन्य वस्तु है, मैं डेटा DB में एक रूप से पोस्ट या एक रिकार्ड से पढ़ने के लिए किया जाना चाहिए लगता है । मुझे लगता है कि आपका संस्करण बहुत कम पठनीय है और इस सम्मेलन के खिलाफ चला जाता है कि हर किसी का उपयोग किया जाता है, जिससे इसे बहुत कम पोर्टेबल बना दिया जाता है। लेकिन यदि आप वास्तव में एक पंक्ति को सहेजना चाहते हैं: $ यह-> सेट करें ('पोस्ट', $ यह-> पोस्ट-> ढूंढें ('सभी')); – neilcrookes

2

फॉर्मों के साथ काम करते समय सीधे इस डेटा को सेट करने के लिए कोई अच्छा कारण नहीं है।

क्यों सम्मेलन तोड़ें - नियंत्रक: सेट एक कारण के लिए है। यदि आप डिस्प्ले या डिस्प्ले लॉजिक उद्देश्यों को देखने के लिए डेटा को पास करना चाहते हैं तो आपको कंट्रोलर को सह-चयन करने की कोशिश करने के बजाय प्रदान किए गए फ़ंक्शन का उपयोग करना चाहिए: अनपेक्षित उद्देश्यों के लिए डेटा।

यदि आप नियमों का पालन करते हैं और चीजों को अपेक्षित, सही तरीके से करते हैं तो केकपीएचपी के भीतर से सब कुछ आसान है।

2

cakephp संस्करण 2 * में, त्रुटि तब होती है जब आप पर $this->data

7

CakePHP में 2.x आप $this->request->data का उपयोग करना चाहिए बजाय यदि सादा $this->data, अन्यथा आप ऊपर यह त्रुटि मिल रही अंत हो सकता है डेटा सेट करने का प्रयास:

Indirect modification of overloaded property View::$data has no effect

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

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