Kohana Orm Validierung
-
28-10-2019 - |
Frage
Ich habe voll funktionsfähiges Validierungsskript, mein Problem ist, dass ich keine benutzerdefinierten Fehlermeldungen erhalten kann
Hier ist meine Funktion für die Registrierung: http://pastebin.com/zf3uvxur
Und hier ist mein Nachrichtenarray: http://pastebin.com/d9guvm3n
Mein Nachrichtenskript ist in: \application\messages\registration.php
Irgendwelche Vorschläge?
Entschuldigung wegen langer Code überspringen Sie einfach HTML und andere Sachen
Lösung
Wenn Sie die vom Benutzermodell ausgelöste Validierungsausnahme aufnehmen, ist wahrscheinlich Ihr Speicherort der Nachrichtendatei falsch. Es muss: 'Registration/user.php' sein.
// ./application/messages/registration/user.php
return array(
'name' => array(
'not_empty' => 'Please enter your username.',
),
'password' => array(
'matches' => 'Passwords doesn\'t match',
'not_empty' => 'Please enter your password'
),
'email' => array(
'email' => 'Your email isn\'t valid',
'not_empty' => 'Please enter your email'
),
'about-me' => array(
'max_length' => 'You cann\'ot exceed 300 characters limit'
),
'_external' => array(
'username' => 'This username already exist'
)
);
Entgegen Michael Ps Antwort ist Sie auch Sie sollte Speichern Sie die gesamte Validierungslogik im Modell. Ihr Controller -Code, um einen neuen Benutzer zu registrieren, sollte so einfach sein wie:
try
{
$user->register($this->request->post());
Auth::instance()->login($this->request->post('username'), $this->request->post('password'));
}
catch(ORM_Validation_Exception $e)
{
$errors = $e->errors('registration');
}
Andere Tipps
Sie sollten die Postdaten validieren, bevor Sie versuchen, Modelle zu erreichen. Ihre Validierungsregeln werden nicht ausgeführt, da Sie keine durchgeführt haben Validierungsprüfung ().
Ich würde so etwas tun wie:
// ./application/classes/controller/user
class Controller_User extends Controller
{
public function action_register()
{
if (isset($_POST) AND Valid::not_empty($_POST)) {
$post = Validation::factory($_POST)
->rule('name', 'not_empty');
if ($post->check()) {
try {
echo 'Success';
/**
* Post is successfully validated, do ORM
* stuff here
*/
} catch (ORM_Validation_Exception $e) {
/**
* Do ORM validation exception stuff here
*/
}
} else {
/**
* $post->check() failed, show the errors
*/
$errors = $post->errors('registration');
print '<pre>';
print_r($errors);
print '</pre>';
}
}
}
}
Registration.Php bleibt meistens gleich, mit Ausnahme der Behebung des Rechtschreibfehlers "Lenght", den Sie hatten:
// ./application/messages/registration.php
return array(
'name' => array(
'not_empty' => 'Please enter your username.',
),
'password' => array(
'matches' => 'Passwords doesn\'t match',
'not_empty' => 'Please enter your password'
),
'email' => array(
'email' => 'Your email isn\'t valid',
'not_empty' => 'Please enter your email'
),
'about-me' => array(
'max_length' => 'You cann\'ot exceed 300 characters limit'
),
'_external' => array(
'username' => 'This username already exist'
)
);
Das Senden eines leeren "Namens" -Feldes wird dann zurückgegeben:
Array
(
[name] => Please enter your username.
)