4

Je travaille sur l'application Zend, mais je n'ai pas beaucoup d'expérience avec Zend, donc je m'appuie uniquement sur mon expérience RubyOnRails.Validation du modèle Zend

des articles couple que j'ai trouvé que la plupart de validation est mis en œuvre au niveau des formes - avec Zend_Form. Mais cela semble un peu bizarre pour moi - que diriez-vous d'avoir une validation au niveau du modèle - créer un modèle basé sur des données de formulaire et courir comme $model->isValid(); ça a du sens car je crée des modèles sans formulaires post-requêtes.

Mon modèle actuel flux:

ProductMapper extends Zend_Db_Table 
Product extends Zend_Db_Table_Row 

Et étant donné que je fais quelque chose comme

$mapper = new ProductMapper(); 
$product => $mapper->find(...); 

// Do some staff with this model 
// And want to check if it's valid before saving 

if ($product.isValid()) { 
    $product.save(); // Zend_Db_Table_Row method 
} else { 
    ... 
} 

Je me rends compte que je peux simplement faire valider avec la méthode RegExp à l'intérieur isValid, mais je voudrais d'utiliser des méthodes déjà implémentées de Zend_Form comme addValidator, addFilter et tout ce qui est utile.

est également cette bonne façon de gérer les modèles Zend?

Toute aide ou suggestion sera très apprécié!

Répondre

2

Vous pouvez utiliser les mêmes filtres et/ou validateurs comme Zend_Form mais comme celui-ci

$validator = new Zend_Validate_Allnum(); 
if ($validator->isValid($data) 
do some code 

ou

$filter = new Zend_Filter_StringTrim(); 
$filteredVal = $filter->filter($val); 

afin que vous puissiez créer votre propre méthode isValid() dans votre classe de ligne où vous pouvez effectuer votre propre logique de validation et les valeurs de filtrage

+0

Cela semble facile à deviner. J'aurais dû vérifier Zend lib dossier :) Merci! – fantactuka

1

modèles dans Zend ne sont pas seulement des représentations d'objets db, la plupart des objets ont en fait rien à voir avec la base de données et sont Model s pour la logique métier. Dans ce contexte, avoir une méthode de validation globale n'a pas de sens. Zend_Db_Table et Row feront des vérifications pour vous lorsque vous jouez avec un objet db, comme vérifier quelle est la clé primaire, mais si vous voulez quelque chose comme Active Record, vous devrez étendre ces classes par vous-même.

+1

D'accord, mais puisque 'Zend_Db_Table_Row' est une représentation de la ligne db, il est logique qu'elle ait une validation. Les modèles de base n'en ont pas besoin. – fantactuka

0

Je ne suis pas d'accord que la couche db (objets ZF Table, rangée) est bon endroit pour la validation. La validation IHMO est une logique d'application ou une contrainte d'entreprise.

Le processus de validation doit être placé dans un modèle concret. La couche DB doit être propre et n'est responsable que de faire simplement une opération de base de données (insertion, mise à jour, suppression, sélection).

Votre modèle doit savoir quels sont les attributs nécessaires (ou attribut de type de données) donc il est un bon endroit pour la validation.

Comme Elzo said - certains modèles sont des objets DB représentent pas - vous devez donc faire l'interface IPersistenceable qui a une méthode valider pour les modèles de base de données-conduit. Ces modèles doivent implémenter propre algorithme de validation.

Cette approche est utile - chaque modèle peut avoir différentes méthodes de validation. Prochaine approche - vous pouvez faire une classe abstraite avec la validation de base de la clé primaire + valider la méthode et chaque modèle persistante étend cette classe.

Questions connexes