Comment valider une propriété dépendant d'une autre propriété, dans Symfony 2
Est-il possible de valider une propriété d'une classe de modèle dépend d'une autre propriété de la même classe?
Par exemple, j'ai cette classe:
class Conference
{
/** $startDate datetime */
protected $startDate;
/** $endDate datetime */
protected $endDate;
}
et je veux que Symfony 2.0 valide, que $startDate
doit être après $endDate
.
Est-ce possible par des annotations ou dois-je le faire manuellement?
Vous devez vous connecter pour publier un commentaire.
Oui, avec le rappel du programme de validation: http://symfony.com/doc/current/reference/constraints/Callback.html
Sur symfony 2.0:
Sur symfony master version:
Ici j'ai choisi de montrer le message d'erreur sur la date de début de champ.
addViolationAtSubPath
est obsolète depuis la version 2.2, veuillez utiliser les addViolationAt à la place.À partir de Symfony 2.4 vous pouvez également utiliser Expression contrainte de validation pour obtenir ce dont vous avez besoin. Je crois que c'est le moyen le plus simple pour ce faire. C'est plus pratique que de Rappel contrainte pour vous.
Ici l'exemple de la façon dont vous pouvez mettre à jour votre modèle de classe avec des contraintes de validation des annotations:
N'oubliez pas de activer les annotations dans votre projet de configuration.
Vous pouvez toujours faire encore plus complexe validations en utilisant la syntaxe de l'expression.
Cannot access protected property App\Entity\Reservation::$start_at
D'une autre façon (à moins de Symfony 2.3) est d'utilisation simple
@Assert\IsTrue
:Comme référence, la documentation.
C'est encore plus simple puisque la version 2.4. Tout ce que vous avez à faire est d'ajouter cette méthode à votre classe:
La
buildViolation
méthode retourne un constructeur qui a un couple de d'autres méthodes pour vous aider à configurer la contrainte (comme les paramètres et traduction).Une meilleure et plus propre solution https://symfony.com/doc/3.4/validation/custom_constraint.html
est d'écrire
Pour vérifier que l'entité est fine, ajouter à la coutume contrainte (pas le validateur)
Qui vous permet d'utiliser une instance de l'entité au lieu de simplement la valeur d'une propriété. Qu'il est possible d'écrire dans le programme de validation:
La meilleure partie est que vous devez écrire dans la classe d'entité:
Espère que ça aide
Pour la Date de validation, nous pouvons simplement utiliser GreaterThan et GreaterThanOrEqual comparaison des contraintes.
Pour plus d'informations, voir les contraintes de validation