ZF2 добавляет входной фильтр в набор полей

Мне нужно добавить дополнительные поля в набор полей, чтобы обеспечить определенную гибкость формы, которую я создаю в Zend Framework 2.

Я хочу реализовать это, используя метод в основной форме.

Добавить поле ввода в набор полей не проблема, но проблема начинается с проверки ввода и фильтрации. Я понятия не имею, как реализовать фильтр для набора полей после его добавления в форму и анализа раздела getInputFilterSpecification.

Вот мой текущий подход, который, к сожалению, не работает:

public function addAdditionalField($data, $filterData = null) {
    $fieldset = $this->get('additional');
    $fieldset->addElement($data);

    if ($filterData !== null) {
        $factory = new InputFactory();
        $filter = $this->getInputFilter();

        var_dump($filter->add($factory->createInputFilter(array('additional' => $filterData))));
    }
}

Любые мысли по этому вопросу?


person ChrJantz    schedule 29.07.2013    source источник
comment
Знаете ли вы о Zend\Form\Element\Collection? Это должно охватывать ваш вопрос.   -  person Sam    schedule 29.07.2013
comment
Я уже использую коллекции, но дело в том, что мне нужно вручную добавлять настраиваемые поля в форму, определяемую смесью входных данных (API, база данных). Как пользовательский конструктор для формы внутри набора полей. Я просто не понимаю, как вручную добавлять фильтры для элементов, содержащихся в наборе полей.   -  person ChrJantz    schedule 29.07.2013
comment
Дело в том, что ваша коллекция/набор полей должны содержать все возможные поля, включая их валидаторы. Теперь, если ваша конфигурация / API говорит, что нет элемента X, вы удаляете элемент и setValidationGroup() этого набора полей для всех элементов, кроме элемента X - вы УДАЛИТЕ материал, который не нужен, вы не добавляете материал   -  person Sam    schedule 29.07.2013
comment
Ладно, нет проблем, если бы список элементов и их количество были бы заданным максимумом, но его нет. Думайте об этом как о службе автоматической установки программного обеспечения, и каждое программное обеспечение имеет разные пользовательские переменные. Я просто могу получить переменные из заданной и заданной базы данных, не более того.   -  person ChrJantz    schedule 30.07.2013
comment
@TheReaper, вы нашли решение этой проблемы?   -  person mrN    schedule 01.05.2014
comment
@mrN извините, я не мог вспомнить на самом деле ...   -  person ChrJantz    schedule 03.05.2014
comment
Блин, у меня похожая проблема...   -  person Katya S    schedule 06.10.2014


Ответы (1)


Для очень похожей задачи я использовал и массив конфигурации. Этот пример из формы входа:

src/Module/Form/LoginForm.php

if($this->moduleSettings['enablCaptchaOnLogin'] === TRUE)
{
   $captcha = new Element\Captcha('captcha');
   $captchaAdapter = new Captcha\Dumb();
   $captchaAdapter->setWordlen(7);
   $captcha->setCaptcha($captchaAdapter)
           ->setAttribute('title', 'Help to prevent SPAM');
   $this->add($captcha);
}

в /Module/view/module/login/index.phtml я использовал функцию has():

if ($form->has('captcha'))
    echo $this->formRow($form->get('captcha')) . PHP_EOL ;

Я надеюсь, это поможет. проверьте http://framework.zend.com/apidoc/2.2/classes/Zend.Form.Form.html

person Haver    schedule 29.07.2013