Hi Stefano,

This doesnt seems to work.

I changed annotation to:

* @Annotation\Validator({"name":"DoctrineModule\Validator\UniqueObject"})

and added on Module (which now extends Zend\ModuleManager\Feature\ValidatorProviderInterface) this:

    public function getValidatorConfig()
    {
        return array(
            'factories' => array(
                'DoctrineModule\Validator\UniqueObject' => function ($sm){

$uniqueObject = new DoctrineModule\Validator\UniqueObject(array(
                        'fields' => 'email',
'object_repository' => $sm->getServiceLocator()->get('Doctrine\ORM\EntityManager')->getRepository('Crm\Entity\User'), 'object_manager' => $sm->getServiceLocator()->get('Doctrine\ORM\EntityManager'),
                    ));
                    return $uniqueObject;
                }
            )
        );
    }

However, the same error occurs...


Hello Cristian,

It looks like your validator is being instantiated as an invokable. Bear in
mind that usually plugin managers automatically instantiate invokables via
a new statement with no constructor arguments. This means that your factory
is not being correctly registered, so the plugin manager can't find your
validator service and tries to automatically add it as an invokable.

You have to register the factory in the ValidatorPluginManager. You can do
that by implementing the Zend\ModuleManager\ValidatorProvider interface in
your module.
This also entails that the service locator parameter of the factory will
not be the root ServiceManager, but the ValidatorPluginManager instead, so
you will have to invoke 'getServiceLocator()'  on it to grab the root one.

Cheers

Il giorno mar 15 set 2015 alle ore 20:39 Cristian Bichis <[email protected]>
ha scritto:

Hi,

I am trying to use

DoctrineModule\Validator\UniqueObject

as validator within a zf2 form with annotations:

      /**
       * @var string
       *
       * @Annotation\Type("email")
       * @Annotation\Required(true)
       * @Annotation\Filter({"name":"Zend\Filter\StringTrim"})
       * @Annotation\Filter({"name":"Zend\Filter\StripTags"})
       * @Annotation\Validator({"name":"Zend\Validator\StringLength",
"options":{"min":6, "max":128, "encoding":"UTF-8"}})
       *
@Annotation\Validator({"name":"DoctrineModule\Validator\UniqueObject"})
       * @Annotation\Options({"label":"Email", "column-size":"sm-10",
"label_attributes":{"class":"col-sm-2"}})
       * @Annotation\Flags({"priority": 93})
       *
       * @ORM\Column(name="email", type="string", length=128,
nullable=false)
       */
      protected $email;


Because I need to inject object_repository and object_manager I tried to
register a factory:

              'factories' => array(
                  'DoctrineModule\Validator\UniqueObject' => function ($sm){
                      $uniqueObject = new
DoctrineModule\Validator\UniqueObject(array(
                          'fields' => 'email',
                          'object_repository' =>
$sm->get('Doctrine\ORM\EntityManager')->getRepository('Crm\Entity\User'),
                          'object_manager' =>
$sm->get('Doctrine\ORM\EntityManager'),
                      ));
                      return $uniqueObject;
                  }
              )

I tried under different configs:
Module getValidatorConfig
Module getFormElementConfig
      or under
'form_elements'
'validators'
etc

No luck...

I am getting the:
PHP Catchable fatal error:  Argument 1 passed to
DoctrineModule\\Validator\\UniqueObject::__construct() must be of the
type array, none given, called in

/home/www/app/vendor/zendframework/zend-servicemanager/src/AbstractPluginManager.php
on line 207 and defined in

/home/www/app/vendor/doctrine/doctrine-module/src/DoctrineModule/Validator/UniqueObject.php
on line 66


Any clue where to register this ?

Cristian

--
List: [email protected]
Info: http://framework.zend.com/archives
Unsubscribe: [email protected]





--
List: [email protected]
Info: http://framework.zend.com/archives
Unsubscribe: [email protected]


Reply via email to