J'essaie d'utiliser l'annotation du validateur UniqueObject
de DoctrineModule dans une entité avec Zend\Form
(ZF3) mais je suis incapable de le faire.Utilisation de l'annotation du validateur DoctrineModule UniqueObject dans l'application ZF3?
Annotation dans l'entité:
* @Annotation\Validator({"name":"DoctrineModule\Validator\UniqueObject"})
procédé contrôleur qui utilise entité:
public function saveAction()
{
$id = (int) $this->params()->fromRoute('id', 0);
$user = $this->em->getRepository(User::class)->find($id);
$builder = new AnnotationBuilder();
...
module.php:
public function getServiceConfig()
{
return [
'factories' => [
'DoctrineModule\Validator\UniqueObject' => function ($serviceManager) {
$uniqueObject = new DoctrineModule\Validator\UniqueObject(array(
'fields' => 'username',
'object_repository' => $serviceManager->get('Doctrine\ORM\EntityManager')->getRepository('Application\Entity\User'),
'object_manager' => $serviceManager->get('Doctrine\ORM\EntityManager'),
));
return $uniqueObject;
},
],
];
}
Erreur vue:
[Catchable fatal error] Argument 1 passed to DoctrineModule\Validator\UniqueObject::__construct() must be of the type array, none given, called in /var/www/jade/vendor/zendframework/zend-servicemanager/src/Factory/InvokableFactory.php on line 32 and defined
[0] file:///var/www/jade/vendor/doctrine/doctrine-module/src/DoctrineModule/Validator/UniqueObject.php.DoctrineModule\Validator\UniqueObject->__construct:66
[1] file:///var/www/jade/vendor/zendframework/zend-servicemanager/src/Factory/InvokableFactory.php.Zend\ServiceManager\Factory\InvokableFactory->__invoke:32
[2] file:///var/www/jade/vendor/zendframework/zend-servicemanager/src/ServiceManager.php.Zend\ServiceManager\ServiceManager->doCreate:747
[3] file:///var/www/jade/vendor/zendframework/zend-servicemanager/src/ServiceManager.php.Zend\ServiceManager\ServiceManager->get:195
[4] file:///var/www/jade/vendor/zendframework/zend-servicemanager/src/AbstractPluginManager.php.Zend\ServiceManager\AbstractPluginManager->get:143
[5] file:///var/www/jade/vendor/zendframework/zend-validator/src/ValidatorChain.php.Zend\Validator\ValidatorChain->plugin:97
[6] file:///var/www/jade/vendor/zendframework/zend-validator/src/ValidatorChain.php.Zend\Validator\ValidatorChain->attachByName:194
[7] file:///var/www/jade/vendor/zendframework/zend-inputfilter/src/Factory.php.Zend\InputFilter\Factory->populateValidators:428
[8] file:///var/www/jade/vendor/zendframework/zend-inputfilter/src/Factory.php.Zend\InputFilter\Factory->createInput:267
[9] file:///var/www/jade/vendor/zendframework/zend-inputfilter/src/Factory.php.Zend\InputFilter\Factory->createInputFilter:357
[10] file:///var/www/jade/vendor/zendframework/zend-form/src/Factory.php.Zend\Form\Factory->prepareAndInjectInputFilter:545
[11] file:///var/www/jade/vendor/zendframework/zend-form/src/Factory.php.Zend\Form\Factory->configureForm:284
[12] file:///var/www/jade/vendor/zendframework/zend-form/src/Factory.php.Zend\Form\Factory->create:114
[13] file:///var/www/jade/vendor/zendframework/zend-form/src/Factory.php.Zend\Form\Factory->createForm:177
[14] file:///var/www/jade/vendor/zendframework/zend-form/src/Annotation/AnnotationBuilder.php.Zend\Form\Annotation\AnnotationBuilder->createForm:246
[15] file:///var/www/jade/module/Application/src/Controller/UserController.php.Application\Controller\UserController->saveAction:132
[16] file:///var/www/jade/vendor/zendframework/zend-mvc/src/Controller/AbstractActionController.php.Zend\Mvc\Controller\AbstractActionController->onDispatch:78
[17] file:///var/www/jade/vendor/zendframework/zend-eventmanager/src/EventManager.php.Zend\EventManager\EventManager->triggerListeners:271
[18] file:///var/www/jade/vendor/zendframework/zend-eventmanager/src/EventManager.php.Zend\EventManager\EventManager->triggerEventUntil:151
[19] file:///var/www/jade/vendor/zendframework/zend-mvc/src/Controller/AbstractController.php.Zend\Mvc\Controller\AbstractController->dispatch:105
[20] file:///var/www/jade/vendor/zendframework/zend-mvc/src/DispatchListener.php.Zend\Mvc\DispatchListener->onDispatch:119
[21] file:///var/www/jade/vendor/zendframework/zend-eventmanager/src/EventManager.php.Zend\EventManager\EventManager->triggerListeners:271
[22] file:///var/www/jade/vendor/zendframework/zend-eventmanager/src/EventManager.php.Zend\EventManager\EventManager->triggerEventUntil:151
[23] file:///var/www/jade/vendor/zendframework/zend-mvc/src/Application.php.Zend\Mvc\Application->run:332
[24] file:///var/www/jade/public/index.php.include:40
[25] file:///var/www/jade/index.php.{main}:2
fondée sur des discussions dans le fil DoctrineModule/questions/585, je réinjecté la FormElementManager
dans le constructeur de la UserController
par usine et attaché de là à la AnnotationBuilder
:
public function __construct(EntityManager $em, \Zend\Form\FormElementManager $fem)
{
$this->em = $em;
$this->fem = $fem;
...
}
public function saveAction() {
...
$builder->setFormFactory(new \Zend\Form\Factory($this->fem));
...
}
Cependant, cette simple a fini par revenir à l'erreur d'origine/trace de pile. Fait intéressant, quand je jette $this->fem
, je vois le validateur UniqueObject dans la sortie de vidage, donc pas clair ce qui ne va pas. J'apprécierais n'importe quelle aide ou suggestions pour obtenir l'annotation UniqueObject
identifiée par le AnnotationBuilder
.
Quelques liens dont j'ai parlé lors de la recherche ceci:
https://github.com/doctrine/DoctrineModule/issues/289 http://permalink.gmane.org/gmane.comp.php.zend.framework.general/41719
Merci @novrm. J'ai essayé ceci mais le validateur ne semble pas être localisé. Je vois cette erreur: 'Un plugin nommé" UniqueObject "n'a pas été trouvé dans le gestionnaire de plugins Zend \ Validator \ ValidatorPluginManager # 0/var/www/jade/vendeur/zendframework/zend-validator/src/ValidatorChain. php (97): Zend \ ServiceManager \ AbstractPluginManager-> get ('UniqueObject', tableau) # 1 /var/www/jade/vendor/zendframework/zend-validator/src/ValidatorChain.php(194): Zend \ Validator \ ValidatorChain-> plugin ('UniqueObject', Array) ' – Non
On dirait que c'est un problème courant: [https://github.com/zendframework/zend-validator/issues/40](https://github.com/ zendframework/zend-validator/issues/40) – Non