Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous,
Alors voilà une erreur bête s'étant glissée dans mon dernier post, j'ai tout recorrigé ... ça marche avec une factory ... sauf que.
Voici ma factory :
[lang=php] class EcheancedebutFactory implements FactoryInterface { public function createService(ServiceLocatorInterface $serviceLocator) { $realServiceLocator = $serviceLocator->getServiceLocator(); $maiContratService = $realServiceLocator->get( 'Maintenance\Service\Model\FMaiContratService' ); return new Echeancedebut($maiContratService); } }
Puis mon validateur :
[lang=php] class Echeancedebut extends AbstractValidator { const ERROR_DATEDEB = 'ERROR_DATEDEB'; protected $maiContratService; protected $messageTemplates = array( self::ERROR_DATEDEB => "Saisie inférieure à la date de début du contrat" ); public function __construct($maiContratService) { $this->maiContratService = $maiContratService; } public function isValid($value){ $this->setValue($value); if ($value != "") { $this->error(self::ERROR_DATEDEB); return false; } return true; } private function validatedate($date) { return false; } }
Et le souci c'est qu'il ne vaut pas me récupérer mon message d'erreur, pourtant il y est ...
Thanks
Dernière modification par amelie (09-09-2015 17:23:09)
Hors ligne
Voici mon input filter :
[lang=php] public function getInputFilter() { if (! $this->inputFilter) { $inputFilter = new InputFilter(); $this->inputFilter = $inputFilter; } $inputFilter->add(array( 'name' => 'dateDeb', 'required' => true, 'allow_empty' => false, 'validators' => array( array( 'name' => 'Date', 'locale' => 'FR_fr', 'options' => array( 'format' => 'd/m/Y', ), ), array( 'name' => 'Maintenance\Validator\Echeancedebut', 'options' => array( 'contratId' => $this->iMaiContratId, ), ) ) )); return $this->inputFilter; }
Et mon var dump à la validation :
array(1) { ["dateDeb"]=> array(1) { ["ERROR_DATEDEB"]=> NULL } }
Hors ligne
Salut,
Je ne sais pas pourquoi ca foire ton code.
Mais pourquoi ne pas utilisé la fonction callback ?
[lang=php] 'validators' => array( array( 'name' => 'Callback', 'options' => array( 'messages' => array( \Zend\Validator\Callback::INVALID_VALUE => 'The end date should be greater than start date', ), 'callback' => function($value, $context = array()) { return $value < $context['endDate']; }, ), ), ),
Hors ligne
En effet comme dit Nirzol, les callback validators sont super sympa. De là tu peux même valider un champs qui dépend de la valeur d'un autre champs etc...
Hors ligne
Hello, petit soucis avec les callback ça empêche de mettre ton fichier de configuration en cache donc penses à plutôt les utiliser dans une classe .
Hors ligne
Nirzol a écrit:
Salut,
Je ne sais pas pourquoi ca foire ton code.
Mais pourquoi ne pas utilisé la fonction callback ?Code:
[lang=php] 'validators' => array( array( 'name' => 'Callback', 'options' => array( 'messages' => array( \Zend\Validator\Callback::INVALID_VALUE => 'The end date should be greater than start date', ), 'callback' => function($value, $context = array()) { return $value < $context['endDate']; }, ), ), ),
Au fait, quelqu'un sait comment on crée un callback sur un regex ? Mon validator doit se baser sur un regex dans lequel je passe une variable qui a été saisie dans le formulaire, donc j'ai besoin de la variable $context
Hors ligne
c'est une fonction tu fais ce que tu veux dedans :
[lang=php] function($value, $context = array()) { ///Do my stuff ... return OtherStuff; },
Hors ligne
Bonjour,
Une question avec ce que disait Orkin plus haut, si tu peu nous éclairer stp Orkin
Orkin a écrit:
Hello, petit soucis avec les callback ça empêche de mettre ton fichier de configuration en cache donc penses à plutôt les utiliser dans une classe
.
Faut il faire donc un truc dans le genre ?
[lang=php] 'validators' => array( array( 'name' => 'Callback', 'options' => array( 'messages' => array( \Zend\Validator\Callback::INVALID_VALUE => 'The end date should be greater than start date', ), 'callback' => new MyClassDeCallback($value, $context = array()), ), ), ),
La classe mise ici doit-elle étendre AbstractValidator ou Callback (qui étend AbstractValidator ) ?
Si je me goure totalement, comment ça marche en fait ? Car je les utilise de plus en plus ces petites bêtes(callback) et j'aimerai quand même pouvoir mettre la config en cache... (50 module sa commence a être lourd en config)
Hors ligne
Je pense qu'il voulait carrément dire de faire une classe qui étends la classe AbstractValidator qui serait appelé AbstractValidator, et tu appelles directement ta classe dans 'name'.
Hors ligne
Ok en définitive il faut créer un custom validator. A quoi sert donc la clé callback si elle entraîne un aussi gros désavantage ?
Hors ligne
Pour moi il sert à faire du RAD, c'est à dire que tu scaffolde avec, et une fois que tu sais précisément ce que tu mets dans ton custom validator tu le créés à ce moment là.
Sinon si tu en as rien a faire des perfs (il y a des gens chez qui ça arrive), pas de soucis dans ce cas là !
Hors ligne
Hello,
Heu sinon de manière plus pragmatique :
j'ai ce code :
[lang=php] array( 'name' => 'Regex', 'options' => array( 'pattern' => '/\[MONTANT0\][0-9.*-+\(\)]*(\[INDICE_[1-9]\][\/]*\[INDICE0_[1-9]\][0-9.*-+\(\)]*){'.$iNbIndice.'}/', 'messages' => array( \Zend\Validator\Regex::NOT_MATCH => 'Veuillez vérifier votre formule et le nombre d\'indices.' ), ), ),
Sauf que $iNbIndice est une valeur saisie dans mon formulaire ... donc pour faire ma fonction callback je fais comment parce que perso j'ai rien compris.
Et sinon ça veut dire quoi "scaffolder" ?
Merci
Dernière modification par amelie (13-10-2015 08:42:57)
Hors ligne
Bonjour,
le scaffolding est traduit en français par "echafaudage". Dans le millieu du développement web, c'est souvent utilisé pour gérer des tâche basique de façon automatique.
J'entends par là, quel intérêt pour nous développeur de créer un Xième controller + factory & services correspondant et de déclarer tout cela dans la config, a la main et de perdre ainsi de précieuses secondes ? La réponse a cette question se trouve généralement dans du code préconstruit, et facilement adaptable ou déjà adapté a notre besoin. C'est ce que ferait par exemple ce module très peu connu :
https://github.com/enlitepro/zf2-scaffold
Par exemple dans les anciennes versions de cakePHP, il suffit juste de déclarer dans un controlleur la variable $scaffold et ce contrôleur là aura déjà tous ce qu'il lui faut d'un système CRUD.
Blog intérréssant :
http://book.cakephp.org/2.0/fr/controll … lding.html
Le scaffolding est donc quelque chose qui permet de construire une architecture d'un projet ou d'une partie de ce projet (échafaudage). Mais attention, s'il mâche le travail,quand on arrive a des choses complexe il vaut mieux faire tout à sa sauce.
Ce que disait @Théocrite, il utilise les callback pour construire son formulaire, lors du dev, tester que tout marche bien, ensuite il détruit le validator pour en créer un custom qui fait la même chose, c'est limite de la refactorisation / optimisation.
Voilà pour ce point.
Hors ligne
Ok
Et pour mon cas de figure ?
J'ai du mal à comprendre parce que le validator dans l'exemple qui a été donné est un "callback" et moi je dois valider en mode "regex" donc je sais pas trop comment m'y prendre ...
thanks.
Hors ligne