Zend-framework-Доступ к другим полям формы в фильтре zf2

У меня проблема в Zend-Framework2, когда мне нужно прочитать/записать значение другого поля в фильтре одного поля.

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

Мне нужно разделить number и numberAddition, потому что у меня есть некоторые строгие ограничения при дальнейшей обработке этих данных. Число должно быть числовым (int), а numberAddition может быть строкой.

Пример пользовательского ввода:
число: 47a
числоДобавление: [пусто]

Следует отфильтровать по:
номер: 47
номерДобавление: a

Я хотел бы реализовать это как фильтр: если numberAddition пусто, а число не является целым, то разделить число на число и numberAddition.

Есть ли способ сделать это с помощью фильтров или есть лучший подход?


person Eich    schedule 25.01.2017    source источник


Ответы (1)


Это неправильное решение

Как в FilterInterface, так и в ValidatorInterface мы не можем видеть какую-либо переданную переменную $context, поэтому приведенное ниже решение не гарантирует никакой прямой совместимости (в основном кто-то может удалить $context, и ваш код больше не будет работать, нет необходимости ждать основной версии сделать это, так как это уже не является частью интерфейсов).

В своем коде вы все еще можете использовать $context, так как теперь вы знаете, что делаете; p

Итак, в основном:

class MyFilter implements \Zend\Filter\FilterInterface
{ 
    public function filter($value, array $context = null)
    {
        if ($array && isset($context['fieldName'])) {
            // do whatever
        }
        return $valueFiltered;
    }
}
person Thomas Dutrion    schedule 25.01.2017
comment
Я вижу, что $context передается по значению, а не по ссылке. Я думаю, что я не могу редактировать значение тогда в фильтре A. Я думаю, что мне нужно написать два фильтра (для номера поля и поля numberAddition), но затем я должен убедиться, что фильтр numberAddition вызывается перед числовым фильтром, чтобы он мог получить доступ нефильтрованное числовое значение. Я выполнил эту работу в контроллере до того, как данные будут привязаны к форме. Но я все еще ищу решение, в котором форма является хозяином своих данных. - person Eich; 27.01.2017
comment
Я бы сказал, что правильным решением может быть использование специального гидратора для гидратации объекта, связанного с формой, но я не могу вам помочь. - person Thomas Dutrion; 27.01.2017