Table Of ContentsPrevious topicNext topicTravailler avec des modèles (Avancé) > This Page |
Validation de modèles¶Validation de l’intégrité des données¶Phalcon\Mvc\Model fournit plusieurs événements pour valider les données et rédiger les règles métier. L’événement spécial “validation” nous permet d’appeler des validateurs prédéfinis sur l’enregistrement. Phalcon expose quelques validateurs déjà prêts à l’emploi à ce niveau de validation. L’exemple suivant montre comment l’utiliser: <?php
namespace Store\Toys;
use Phalcon\Mvc\Model;
use Phalcon\Validation;
use Phalcon\Validation\Validator\Uniqueness;
use Phalcon\Validation\Validator\InclusionIn;
class Robots extends Model
{
public function validation()
{
$validator = new Validation();
$validator->add(
"type",
new InclusionIn(
[
"domain" => [
"Mechanical",
"Virtual",
]
]
)
);
$validator->add(
"name",
new Uniqueness(
[
"message" => "The robot name must be unique",
]
)
);
return $this->validate($validator);
}
}
L’exemple précédent effectue une validation en utilisant le validateur prédéfini “InclusionIn”. Il vérifie que la valeur du champ “type” soit dans la liste de “domain”. Si la valeur n’est pas inclue dans la méthode alors le validateur échoue et retourne “faux”. Les validateurs prédéfinis qui suivent sont disponibles:
L’idée derrière la création de validateurs est de les rendre réutilisables entre plusieurs modèles. Un validateur peut être aussi simple que: <?php
namespace Store\Toys;
use Phalcon\Mvc\Model;
use Phalcon\Mvc\Model\Message;
class Robots extends Model
{
public function validation()
{
if ($this->type === "Old") {
$message = new Message(
"Sorry, old robots are not allowed anymore",
"type",
"MyType"
);
$this->appendMessage($message);
return false;
}
return true;
}
}
Messages de validation¶Phalcon\Mvc\Model dispose d’un sous-système de messagerie qui fourni un moyen flexible de sortir ou stocker des messages de validation générés pendant les processus d’insertion/mise à jour. Chaque message consiste en une instance de la classe Phalcon\Mvc\Model\Message. L’ensemble
de messages générés peut être récupéré avec la méthode <?php
if ($robot->save() === false) {
$messages = $robot->getMessages();
foreach ($messages as $message) {
echo "Message: ", $message->getMessage();
echo "Field: ", $message->getField();
echo "Type: ", $message->getType();
}
}
La méthode <?php
namespace Store\Toys;
use Phalcon\Mvc\Model;
class Robots extends Model
{
public function getMessages()
{
$messages = [];
foreach (parent::getMessages() as $message) {
switch ($message->getType()) {
case "InvalidCreateAttempt":
$messages[] = "The record cannot be created because it already exists";
break;
case "InvalidUpdateAttempt":
$messages[] = "The record cannot be updated because it doesn't exist";
break;
case "PresenceOf":
$messages[] = "The field " . $message->getField() . " is mandatory";
break;
}
}
return $messages;
}
}
Événement d’échec de validation¶D’autres types d’événement sont disponibles lorsque le processus de validation détecte une incohérence:
|