2017-01-24 3 views
0

Ich habe eine Frage zum Auswählen von Validierungsregeln.So schließen Sie eine Regel aus einem Regelsatz aus

Ich stecke meine Validierungsregeln im Modell wie so

public $validate = array(
    'sentence_fields'=> array(
    'select_chapter' => array(
     'field'=>'select_chapter', 
     'label'=>'Select chapter', 
     'rules'=>'required|integer' 
    ), 
    'source_sentence' => array(
     'field'=>'source_sentence', 
     'label'=>'Source', 
     'rules'=>'trim|required|max_length[500]' 
    ), 
    'translated_sentence' => array(
     'field'=>'translated_sentence', 
     'label'=>'Translation', 
     'rules'=>'trim|required|max_length[500]' 
    ), 
    'translated_translation' => array(
     'field'=>'translated_translation[]', 
     'label'=>'Select another translation', 
     'rules'=>'trim|max_length[500]' 
    ) 
) 
); 

es dann wie so in der Steuerung rufe

$validate = $this->sentence_model->validate['sentence_fields']; 
$this->form_validation->set_rules($validate); 

, die für die Methode erstellen war, aber ich habe eine Update-Methode der benötigt das select_chapter Regelwerk nicht.

Gibt es eine einfache Möglichkeit, diesen Regelsatz (same_fields) aufzurufen, aber select_chapter für meine Update-Methode auszuschließen?

Danke.

Antwort

1

Wenn Sie select_chapter für mein Update method.Just Verwendung Arrays unset() Methode wie folgt ausschließen möchten ..

$validate = $this->sentence_model->validate['sentence_fields']; 

unset($validate['sentence_fields']['select_chapter ']);//unsets your array 
$this->form_validation->set_rules($validate); 
+0

Hallo, ich verstehe, wie das funktioniert, aber aus irgendeinem Grund bin immer ich immer noch die Wählen Sie das Kapitel-Array in der Ausgabe des folgenden ... $ validate = $ this-> sentence_model-> validate ['sentence_fields']; nicht gesetzt ($ validate ['sentence_fields'] ['select_chapter']); print_r ($ validate); ' Kannst du hier offensichtlich etwas falsch sehen? Vielen Dank. – user3442612

+0

oh ja, Sie müssen die einzelnen Schlüssel innerhalb von '$ validate ['sentence_fields'] ['select_chapter']' aufheben. –

+0

'unset ($ validate ['select_chapter']);' scheint zu funktionieren, da wir 'same_fields' zu' $ validate' zugewiesen haben – user3442612

1

Wie die obige Methode funktioniert, würde ich empfehlen es eine Funktion eine bessere Lesbarkeit und Leichtigkeit zu ermöglichen von Nutzen. Zu tun haben, so einen Blick auf die folgenden

public $validate = array(
    'sentence_fields'=> array(
    'select_chapter' => array(
     'field'=>'select_chapter', 
     'label'=>'Select chapter', 
     'rules'=>'required|integer' 
    ), 
    'source_sentence' => array(
     'field'=>'source_sentence', 
     'label'=>'Source', 
     'rules'=>'trim|required|max_length[500]' 
    ), 
    'translated_sentence' => array(
     'field'=>'translated_sentence', 
     'label'=>'Translation', 
     'rules'=>'trim|required|max_length[500]' 
    ), 
    'translated_translation' => array(
     'field'=>'translated_translation[]', 
     'label'=>'Select another translation', 
     'rules'=>'trim|max_length[500]' 
    ) 
) 
); 

public function formValidationRules($validation, $unset = array()) { 
    if($unset) { 
     return $this->unsetValidation($unset); 
    } else { 
     return $this->validate[$validation]; 
    } 
} 

private function ($unset) { 
    $validations = $this->validate[$validation]; 
    foreach($unset as $key) 
    { 
    unset($validations[$key]); 
    } 
    return $validations; 
} 

So können Sie Ihre Validierung wie folgt tun:

$validate = $this->sentence_model->formValidationRules('sentence_fields', ['select_chapter']); 

$this->form_validation->set_rules($validate); 
Verwandte Themen