Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 26-07-2013 01:20:35

shiva
Membre
Date d'inscription: 31-01-2012
Messages: 10

Utilisation de "DoctrineModule\Validator\NoObjectExists"

Bonjour,

Comment utiliser "DoctrineModule\Validator\NoObjectExists" dans un validateur.

La portion de mon script est le suivant :

module/User/src/User/Form/UserFilter.php

Code:

array(
                                'name' => 'DoctrineModule\Validator\NoObjectExists',
                        'options' => array(
                            object_repository'   => 'User\Entity\User',
                            'fields' => array('username'),
                            'messages' => array(
                                'objectFound' => 'The username \'%value%\'  already exists !'
                            ),
                        ),
                        
                    ),

Mais j'ai le message d'erreur suivant:

Code:

Option "object_repository" is required and must be an instance of Doctrine\Common\Persistence\ObjectRepository, string given

Hors ligne

 

#2 26-07-2013 08:36:58

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

Re: Utilisation de "DoctrineModule\Validator\NoObjectExists"

Salut, la méthode à suivre est la suivante :

Code:

[lang=php]array(
                        'name' => 'DoctrineModule\Validator\NoObjectExists',
                        'options' => array(
                            'object_repository' => $this->getObjectManager()->getRepository(
                                'Application\Entity\Membre'
                            ),
                            'fields' => 'login',
                        ),
                    ),

Où $this->getObjectManager() retourne une instance du type Doctrine\Common\Persistence\ObjectManager.

Hors ligne

 

#3 08-08-2013 12:50:00

shiva
Membre
Date d'inscription: 31-01-2012
Messages: 10

Re: Utilisation de "DoctrineModule\Validator\NoObjectExists"

Merci,
Excellent ça marche.

Hors ligne

 

#4 03-09-2013 18:07:42

Eddz
Nouveau membre
Lieu: Toulouse/Paris
Date d'inscription: 21-05-2011
Messages: 4
Site web

Re: Utilisation de "DoctrineModule\Validator\NoObjectExists"

Hello,
    J'essai également de faire fonctionner NoObjectExists.
je suis confronté au même problème malgré le fait que j'implémente  \Doctrine\Common\Persistence\ObjectRepository depuis ma "Repository" class.

J'ai suivis cette exemple : https://github.com/josielrocha/ZF2---Do … lidator.md

Instanciation de mon Form depuis mon controller : http://pastebin.com/gJQwbeX2 Ligne 126
Pass de mon option 'object_manger' depuis mon Form : http://pastebin.com/ckcyiKke Ligne 144
ClientRepository.php qui implémente \Doctrine\Common\Persistence\ObjectRepository : http://pastebin.com/jybpT3VT

Erreur : Option "object_repository" is required and must be an instance of Doctrine\Common\Persistence\ObjectRepository, nothing given

Merci d'avance, je cherche depuis un petit moment

Dernière modification par Eddz (03-09-2013 18:08:43)

Hors ligne

 

#5 03-09-2013 22:07:58

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

Re: Utilisation de "DoctrineModule\Validator\NoObjectExists"

Salut, je t'encourage à aller lire cette doc : https://github.com/doctrine/DoctrineMod … element.md

Tu devrais avoir de bon éléments de réponse ^^.

Pour la création de ton formulaire c'est pas comme ça qu'il faut faire. Tu as deux solutions soit une factory qui va passer en paramètre l'object_repository soit tu fais un initializer et tu implément ObjectManagerAwareInterface et ça injectera automatiquement l'object_repository.

Hors ligne

 

#6 04-09-2013 12:38:56

Eddz
Nouveau membre
Lieu: Toulouse/Paris
Date d'inscription: 21-05-2011
Messages: 4
Site web

Re: Utilisation de "DoctrineModule\Validator\NoObjectExists"

Merci de ta réponse Orkin,
      Mais pour être honnête, je n'ai pas vraiment compris.

Aurais tu peux être quelques exemples concret par rapport à mon contexte s'il te plait ?

Hors ligne

 

#7 04-09-2013 14:09:23

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

Re: Utilisation de "DoctrineModule\Validator\NoObjectExists"

As-tu reproduit un formulaire du même genre que celui de l'exemple ? Celui-ci est implémente l'interface ObjectManagerAwareInterface. Cette interface sert lorsque le service manager va créer une instance de ta classe, il va utiliser des initializers de la même manière qu'il le fait pour ServiceLocatorAwareInterface. La seule différence c'est que le ZendFramework n'a pas 36 initializers de déclarés car c'est assez gourmand en ressources donc tu dois ajouter toi même ton initializer pour l'object manager comme ça dans ton Module.php

Code:

[lang=php]public function getFormElementConfig()
    {
        return array(
            'initializers' => array(
                'ObjectManagerInitializer' => function ($element, $formElements) {
                    if ($element instanceof ObjectManagerAwareInterface) {
                        $services = $formElements->getServiceLocator();
                        $entityManager = $services->get('nom de ton orm');

                        $element->setObjectManager($entityManager);
                    }
                },
            ),
        );
    }

Hors ligne

 

#8 04-09-2013 14:33:33

Eddz
Nouveau membre
Lieu: Toulouse/Paris
Date d'inscription: 21-05-2011
Messages: 4
Site web

Re: Utilisation de "DoctrineModule\Validator\NoObjectExists"

l'ensemble de mes formulaires sont configuré comme expliqué ici : http://apps.zfdaily.com/dlutwbootstrap- … horizontal

Je ne peux pas utiliser les class de validation de doctrine module de cette manière ?

Hors ligne

 

#9 04-09-2013 16:16:52

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

Re: Utilisation de "DoctrineModule\Validator\NoObjectExists"

L'exemple que tu donnes ne dit pas de quelle manière tu récupères l'instance de ton formulaire dans ton contrôleur.

Hors ligne

 

#10 04-09-2013 16:40:54

Eddz
Nouveau membre
Lieu: Toulouse/Paris
Date d'inscription: 21-05-2011
Messages: 4
Site web

Re: Utilisation de "DoctrineModule\Validator\NoObjectExists"

Dans l'exemple que je communique précédemment, on peux voir la manière dont je créer mes fieldsets.

J'ai mis en place cette manière, et maintenant je me demande comment écrire mon array ligne 150 : http://pastebin.com/c6ifDvmi afin qu'il fasse bien référence à mon "field" dans mon "fieldset".

Merci

Hors ligne

 

#11 04-09-2013 17:37:31

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

Re: Utilisation de "DoctrineModule\Validator\NoObjectExists"

Parce que c'est pas du tout comme ça qu'il faut faire. Encore une fois vas faire un tour sur la documentation officielle il y a un exemple qui explique comment séparer proprement ton fieldset de ton formulaire et donc y associer des validateurs proprement par la même occasion.

Ensuite pour la création de ton formulaire tu fais un new MonFormulaire(). Si tu veux pouvoir bénéficier d'un objet enrichi par le ZF2 c'est pas de cette manière qu'il faut procéder.

Orkin a écrit:

Pour la création de ton formulaire c'est pas comme ça qu'il faut faire. Tu as deux solutions soit une factory qui va passer en paramètre l'object_repository soit tu fais un initializer et tu implément ObjectManagerAwareInterface et ça injectera automatiquement l'object_repository.

Pour avoir accès à l'ObjectManager dans le formulaire tu n'as pas le choix c'est soit tu fais l'initialiser et tu fais une entrée dans ton FormElementManager (dans le fichier module.config.php : form_elements => array('invokables' => array() etc ...). Soit tu fais une factory qui va récupérer l'ObjectManager et l'injecter à ton formulaire.

Dans le premier cas tu ne dois pas utiliser le constructeur mais la méthode init() dans ton formulaire, pour la seconde ça n'a pas d'importance, si tu utilises la fonction init() il faudra l'appeler dans ta factory avant de retourner le formulaire.

Prends bien le temps de relire ton code et de comparer avec les documentations officielles. Le tuto que tu as suivi est assez vieux (ZF 2.0.x). Tu dois te forcer à faire ça si tu veux progresser smile. Donc prend le temps et si tu as des questions ou des choses que tu ne comprends pas j'y répondrais mais je ne te ferais pas ton code wink.

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