0

Я хочу, чтобы повторно использовать Fieldset, который реализует InputFilterProviderInterface о она имеет метод getInputFilterSpecification где я могу объявить спецификации для всех элементов полей.Невозможно получить диспетчер объектов в input_filter конфигурации

public function getInputFilterSpecification() 
    { 
     return array(
      'email' => array(
       'filters' => $this->getTextFilters(), 
       'validators' => array(
        $this->getUniqueObjectValidator() 
... 

Проблема заключается в том, что getUniqueObjectValidator нуждается в Doctrine \ ORM \ EntityManager но он не объявлен в ServiceLocator для InputFilter.

Как вы думаете, как я могу получить доступ к EntityManager на фабриках inputFilter?

ответ

1

Для этого вам необходимо ввести DoctrineORM EntityManager в ваш fieldset. Вы можете, например, перенести ther $em с контроллера на форму, а затем из формы в fieldset, но это плохое и уродливое решение, особенно если у вас есть сложная форма со многими полями. Хорошим решением является использование Zend\ServiceManager\ServiceLocator.

Вот правильный способ справиться с этим:

Во-первых, вы должны реализовать функцию getFormElementConfig() в классе модуля. Что-то вроде этого:

// module.php 
public function getFormElementConfig() 
{ 
return array(
    'factories' => array(
     'yourfieldset' => function ($sm) { 
      $em = $sm->getServiceLocator()->get('Doctrine\ORM\EntityManager'); 
      $fieldset = new YourFieldset($em); 
      return $fieldset; 
     } 
    ) 
); 
} 

Затем убедитесь, что ваш fieldest называет родительский конструктор, как это:

parent::__construct('yourfieldset'); //with the name of the factory 

И, наконец инстанцирует форму через FormElementManager.:

$formManager = $this->serviceLocator->get('FormElementManager'); 
$form = $formManager->get('ModuleName\Form\YourForm'); 

Пожалуйста, смотрите эти ссылки для получения более подробной информации:

Надеется, что это помогает

 Смежные вопросы

  • Нет связанных вопросов^_^