, मुझे लगता है कि एक बेहतर दृष्टिकोण इस मामले में परिदृश्य का उपयोग नहीं करने के लिए किया जाएगा। नियमों में अगला कोड केवल परिदृश्य को कहता है: अगले फ़ील्ड आवश्यक हैं। लेकिन नहीं: अन्य छोड़ें।
array('name, username, email', 'required', 'on' => 'update'),
उदाहरण के लिए, अगर हम 32 अक्षर तक पासवर्ड की लंबाई की सीमा है, लेकिन एक डेटाबेस में एक प्रारूप SHA1 (लंबाई 40) में जमा हो जाती है, तो हम एक समस्या है क्योंकि सत्यापनकर्ता डेटाबेस को अवरुद्ध कर देगा है क्वेरी। ऐसा इसलिए है क्योंकि जब आप अपडेट करते हैं, तो "वैध" विधि सभी वर्ग गुणों (डेटाबेस तालिका मैपिंग का संबंध देती है) की जांच करती है, न केवल पोस्ट द्वारा वितरित किए गए नए।
"saveAttributes" विधि का उपयोग कर सकता है, लेकिन फिर मैंने एक और समस्या देखी। यदि कॉलम "ईमेल" डेटाबेस में अद्वितीय है और यदि संपादित ईमेल मौजूदा में से एक डुप्लिकेट करता है, तो नियमों में परिभाषित वाईआई संदेश प्रणाली अधिसूचना नहीं दे सकती है और डेटाबेस क्वेरी के संबंध में त्रुटि कोड फेंकता है।
मुझे लगता है कि सबसे आसान तरीका यह है: इस मामले में परिदृश्य सेट न करें। बस अपनी इच्छित संपत्तियों के तर्क के रूप में भेजें। यह जीआईआई द्वारा बनाई गई सभी सीआरयूडी सुविधाओं को बनाए रखेगा।
public function rules() {
return array(
array('name, username, email, password', 'required'),
);
}
(नियंत्रक में)
if($id==Yii::app()->user->id){
$model=$this->loadModel($id);
if(isset($_POST['JbJsJobResume'])) {
$model->attributes=$_POST['JbJsJobResume'];
if($model->save(true, array('name', 'username', 'email')))
$this->redirect(array('view','id'=>$model->id));
}
$this->render('update',array('model'=>$model,));
}
(मॉडल में) मैंने देखा है कि आप RBAC का उपयोग नहीं करते:
अपने कोड में यह इस तरह दिखता है। यह बहुत सुविधाजनक और लचीला है - इसे आजमाएं।सेट करने से पहले
http://www.yiiframework.com/doc/guide/1.1/en/topics.auth#role-based-access-control
ब्रो आपकी मदद के लिए धन्यवाद। लेकिन यह –
पर काम नहीं कर रहा है यदि आप परिदृश्य विकल्पों का पालन करते हैं तो अब आपके द्वारा चलाए जाने वाले क्रिया के लिए आपको $ मॉडल लोड करने के बाद परिदृश्य सेट करना होगा। दृश्य से पासवर्ड फ़ील्ड को हटाकर सत्यापन को इस विशेषता की आवश्यकता नहीं होगी। अपनी समस्या का बेहतर विचार रखने के लिए कृपया अपनी त्रुटि निर्दिष्ट करें। –
क्या आप मुझे ब्रीफली समझा सकते हैं ?? –