Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 09-09-2015 17:21:33

amelie
Membre
Lieu: Marseille
Date d'inscription: 05-02-2013
Messages: 113
Site web

Validator avec une factory

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 :

Code:

[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 :

Code:

[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 smile

Dernière modification par amelie (09-09-2015 17:23:09)

Hors ligne

 

#2 10-09-2015 09:53:43

amelie
Membre
Lieu: Marseille
Date d'inscription: 05-02-2013
Messages: 113
Site web

Re: Validator avec une factory

Voici mon input filter :

Code:

[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

 

#3 15-09-2015 11:57:30

Nirzol
Membre
Date d'inscription: 11-01-2013
Messages: 65

Re: Validator avec une factory

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'];
                            },
                        ),
                    ),                          
                ),

Hors ligne

 

#4 16-09-2015 09:04:14

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Validator avec une factory

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...


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#5 17-09-2015 08:45:18

amelie
Membre
Lieu: Marseille
Date d'inscription: 05-02-2013
Messages: 113
Site web

Re: Validator avec une factory

Hello, je ne connaissais pas cette fonctionnalité smile Merci pour le tuyau !

Hors ligne

 

#6 17-09-2015 10:11:42

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Validator avec une factory

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 wink.

Hors ligne

 

#7 30-09-2015 09:52:45

amelie
Membre
Lieu: Marseille
Date d'inscription: 05-02-2013
Messages: 113
Site web

Re: Validator avec une factory

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

 

#8 05-10-2015 10:28:04

Nirzol
Membre
Date d'inscription: 11-01-2013
Messages: 65

Re: Validator avec une factory

c'est une fonction tu fais ce que tu veux dedans :

Code:

 [lang=php]
function($value, $context = array()) {     
                   ///Do my stuff ...      
      
                return OtherStuff;
            },

Hors ligne

 

#9 05-10-2015 11:18:37

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Validator avec une factory

Bonjour,

Une question avec ce que disait Orkin plus haut, si tu peu nous éclairer stp Orkin wink

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 wink.

Faut il faire donc un truc dans le genre ?

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' => 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)


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#10 05-10-2015 12:44:46

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: Validator avec une factory

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

 

#11 06-10-2015 09:44:20

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Validator avec une factory

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 ?


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#12 06-10-2015 09:50:49

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: Validator avec une factory

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

 

#13 13-10-2015 08:40:59

amelie
Membre
Lieu: Marseille
Date d'inscription: 05-02-2013
Messages: 113
Site web

Re: Validator avec une factory

Hello,

Heu sinon de manière plus pragmatique :

j'ai ce code :

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

 

#14 13-10-2015 09:35:12

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Validator avec une factory

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.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#15 13-10-2015 16:04:14

amelie
Membre
Lieu: Marseille
Date d'inscription: 05-02-2013
Messages: 113
Site web

Re: Validator avec une factory

Ok smile

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

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages