Hallo ich hoffe du kannst mir dabei helfen. Ich habe viele der gleichen Fragen zu diesem Thema gesehen und keiner von ihnen funktioniert für mich.Codeigniter Formvalidierung Rückruf im Modell
Ich benutze Codeigniter 2.2.2 und versuche, Formular-Validierung im Modell zu erstellen, so dass es von mehreren Controllern zugänglich sein kann. Die Formularüberprüfung konnte bei benutzerdefinierten Callbacks, die im Modell deklariert wurden, nicht korrekt zurückgegeben werden.
// in Model
function validateErrors() {
$rules = array(
array('field'=>'username', 'label'=>'User', 'rules'=>'trim|required|callback_userPrefix'),
array('field'=>'password', 'label'=>'Password', 'rules'=>'trim|required|callback_passwordNotEmpty'),
);
$this->load->library('form_validation');
$this->form_validation->set_rules($rules);
if ($this->form_validation->run() == FALSE) {
$errors = array();
foreach ($rules as $r)
$errors[$r['field']] = $this->form_validation->error($r['field']);
return $errors;
}
return false;
}
public function userPrefix() {
$find = 'user_';
if (strpos($this->input->post('username'), $find) != 0) {
$this->form_validation->set_message('userPrefix', 'Username not allowed.');
return false;
}
return true;
}
public function passwordNotEmpty() {
// not the actual callback just an example
if (empty($this->input->post('password'))) {
$this->form_validation->set_message('passwordNotEmpty', 'Password cannot be blank.');
return false;
}
return true;
}
so kann es in Controller gesteuert werden mag:
// in Controller
if ($this->input->post()) {
$this->load->model('ModelName','model1', true);
$validation_errors = $this->model1->validateErrors();
if ($validation_errors === false) {
// continue saving record
} else {
print_r($validation_errors); exit;
}
}
Ich wollte Formularvalidierung jeden Benutzer-Login erstellen. Aber da mehrere Controller die gleiche Validierung verwenden, habe ich die Validierung und ihre benutzerdefinierten Rückrufe im Modell deklariert, um die Codierungslänge in den Controllern zu minimieren (hoffentlich zu minimieren).
Auch this answer sagt, Sie können die Formularüberprüfung in dem Modell tun (auch Callbacks in Modell erklärt angeblich funktioniert). Ich habe das versucht, würde aber nicht für mich arbeiten.
Kann mir jemand dabei helfen? Vielen Dank!
Vielleicht ist dies ein Grund, auf Codeigniter 3 zu aktualisieren? Es gibt große Vorteile beim Upgrade und es gibt nicht so viele brechende Änderungen. Dann könnten Sie aufrufbar in Ihren Modellen wie: http://www.codeigniter.com/user_guide/libraries/form_validation.html#callable-use-anything-as-a-rule – cartalot
@cartalot bedeutet das, es kann nicht getan werden? Ich kann nicht auf v3 upgraden, weil ich nur auf bestimmte Module auf dem System meiner aktuellen Firma zugreifen kann – JNY
teilen Sie Ihre HTML mit uns, dann wird es einfacher sein, herauszufinden, was vor sich geht. – Jobayer