Kohana ORM validation
-
28-10-2019 - |
Question
Je travaille entièrement script de validation mon problème est que je ne peux pas recevoir des messages d'erreur personnalisés
Voici ma fonction d'enregistrement: http://pastebin.com/ZF3UVxUr
Et voici mon tableau de messages: http://pastebin.com/d9GUvM3N
mon script de messages est: \application\messages\registration.php
Toutes les suggestions
Désolé long code html sautez et d'autres choses
La solution
Si vous attrapant l'exception de validation qui est lancée par le modèle de l'utilisateur, puis probablement votre message emplacement du fichier est incorrect. Il doit être:. 'Enregistrement / user.php'
// ./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'
)
);
En outre, contrairement à la réponse de Michael P, vous devrait stocker toute logique de validation dans le modèle. Votre code de contrôleur, pour enregistrer un nouvel utilisateur, doit être aussi simple que:
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');
}
Autres conseils
Vous devez valider les données post avant de tenter de frapper tous les modèles. Vos règles de validation ne sont pas en cours d'exécution parce que vous ne l'avez pas effectué une check () .
je ferais quelque chose comme:
// ./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>';
}
}
}
}
séjours registration.php essentiellement les mêmes, à l'exception de la fixation faute d'orthographe « de longueur » vous avez eu:
// ./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'
)
);
Ensuite, l'envoi d'un champ 'nom' vide retourne:
Array
(
[name] => Please enter your username.
)