Formulaire de connexion Lithium et validation (sans modèle) – comment ?
Question
Existe-t-il un moyen d'utiliser Validator sur le formulaire de connexion à partir de Authentification simple au lithium Didacticiel.Je sais qu'il est préférable d'utiliser la validation dans le modèle, mais avec le formulaire de connexion, il n'y a pas de modèle, donc, si je comprends bien, je dois utiliser Validator dans SessionsController, mais je ne sais pas comment le faire (
Ce que j'essaie de faire est dans SessionsController :
<?php
namespace app\controllers;
use lithium\security\Auth;
use lithium\storage\Session;
use lithium\util\Validator;
class SessionsController extends \lithium\action\Controller {
private $rules = array(
'password' => array(
array('notEmpty', 'message' => 'password is empty'),
),
'email' => array(
array('notEmpty', 'message' => 'email is empty'),
array('email', 'message' => 'email is not valid')
)
);
public function add() {
if ($this->request->data && Auth::check('default', $this->request)) {
return $this->redirect('/');
}
// Handle failed authentication attempts
$errors = Validator::check($this->request->data, $this->rules);
return compact('errors');
}
public function delete() {
Auth::clear('default');
return $this->redirect('/');
}
/* ... */
}
et je m'attends à ce qu'une fois le formulaire vide envoyé, il soit rendu avec des erreurs, comme lors de la création d'un utilisateur à partir d'un didacticiel.Mais aucune erreur n’est affichée, il suffit de vous reconnecter au formulaire.Puis-je un jour valider des formulaires sans modèles et comment le faire dans Lithium ?
Merci d'avance.
La solution
Les erreurs rendues dans le formulaire sont liées à une entité, qui est liée au formulaire lorsque vous le créez avec $this->form->create($user)
.Dans ce cas seulement, les erreurs s'affichent automatiquement grâce à l'assistant de formulaire.
Si vous avez besoin de vérifier, dans le contrôleur, les données entrantes, vous pouvez vérifier $this->request->data['password']
et renvoie les erreurs que vous devez gérer vous-même dans la vue formulaire (avec if (!empty($errors))
Par exemple)