वाईआई ग्रिडव्यू वैल्यू-पीएचपी, ग्रिडव्यू, वाईआई में बाहरी चर का उपयोग करें

मेरे शिक्षक मॉडल में एक फ़ंक्शन है जो श्रेणियों की सरणी देता है।

getCaterogies() {
return array("1" => "short tempered", "2" => "funny", "3" => "visionary", ...);
}

मैं डेटाबेस में इंडेक्स संग्रहित कर रहा हूं और इसके अनुरूप सरणी के मान का उपयोग करके हर जगह मूल्य प्रदर्शित कर रहा हूं ..

$categories = $teacher->categories;
$category = $categories[$teacher->category];

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

अब मुझे जिस समस्या का सामना करना पड़ रहा है वह यह है कि ग्रिडव्यू में मूल्यों को प्रदर्शित करते समय, मुझे एक मूल्य फ़ील्ड में 2 लाइनें लिखनी होंगी, लेकिन यह एक अभिव्यक्ति है, और बाहरी चर भी यह नहीं लेता है।

मैं ग्रिडव्यू के लिए यह कैसे काम कर सकता हूं?

उत्तर:

उत्तर № 1 के लिए 45

आप अज्ञात फ़ंक्शन का उपयोग मूल्य के रूप में कर सकते हैं जो ले सकता है $row, $data जहां परम $row पंक्ति संख्या (शून्य-आधारित) रखती है और $data पंक्ति के लिए डेटा मॉडल शामिल है।

इस तरह आप इसे केवल अंदर ही परिभाषित कर सकते हैं।

$this->widget("zii.widgets.grid.CGridView", array(
"dataProvider"=>$dataProvider,
"columns"=>array(
array(
"name"=>"..",
"value"=>function($data,$row){
$categories = $teacher->categories;
return $categories[$data->category];
},
),
),
));

और यदि आप इसे बाहर से उपयोग करना चाहते हैं, तो आप PHP पर भरोसा कर सकते हैं use:

$categories = $teacher->categories;
$this->widget("zii.widgets.grid.CGridView", array(
"dataProvider"=>$dataProvider,
"columns"=>array(
array(
"name"=>"..",
"value"=>function($data,$row) use ($categories){
return $categories[$data->category];
},
),
),
));

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


जवाब के लिए 2 № 2

तुम लिख सकते हो

$categories = $teacher->categories;
$category = $categories[$teacher->category];

एक पंक्ति में:

$category = $teacher->categories[$teacher->category];

इसके अलावा, मैं आपको एक और समाधान का उपयोग करने का सुझाव देता हूं:

class ModelClass
{
const STATUS_SHORT_TEMPERED = 1;
const STATUS_FUNNY = 2;
const STATUS_VISIONARY = 3;
}

यह आपको अधिक अर्थपूर्ण उपयोग करने की अनुमति देता है

ModelClass::STATUS_FUNNY;

कम अर्थपूर्ण के बजाय

2;

साथ ही, आप अपनी सरणी इस तरह से लिख सकते हैं:

getCaterogies() {
return array(
ModelClass::STATUS_FUNNY => "status funny",
...
);
}

संबंधित सवाल
सबसे लोकप्रिय