2013-02-08 3 views
0

Итак, я создал фильтр ввода (см. Ниже), но мне нужно протестировать 24 поля, чтобы убедиться, что все они действительны (только одно перечисленное ниже, чтобы это было просто). В этом случае вход поступает с сервера электронной почты, а не с пользователя, поэтому мне нужно принять ввод и не отправлять ошибку. Тем не менее, мне все еще нужно проверить данные, чтобы никто не возился с заголовками/полями, пытаясь все испортить.Zend Framework 2 Установить значение по умолчанию, если неверный ввод

Так что мой вопрос: как я могу отправить значение по умолчанию для каждого входа? Например, удар, если почтовый ящик длина 0, что-то не так, поэтому я просто хочу, чтобы установить значение, чтобы быть что-то вроде «InvalidMailbox», так что я могу по-прежнему хранить это в базе данных,

public function getInputFilter() 
{ 
    if (!$this->inputFilter) { 
     $inputFilter = new InputFilter(); 
     $factory  = new InputFactory(); 

     $inputFilter->add($factory->createInput(array(
      'name'  => 'mailbox', 
      'required' => true, 
      'filters' => array(
       array('name' => 'StripTags'), 
       array('name' => 'StripNewLines'), 
       array('name' => 'StringToLower'), 
       array('name' => 'StringTrim'), 
      ), 
      'validators' => array(
       array(
        'name' => 'StringLength', 
        'options' => array(
         'encoding' => 'UTF-8', 
         'min'  => 1, 
         'max'  => 200, 
        ), 
       ), 
      ), 
     ))); 

     $this->inputFilter = $inputFilter; 
    } 

    return $this->inputFilter; 
} 

Назвав его. ..

$mail = new SMail(); 
$inputFilter = $mail->getInputFilter; 
$inputFilter->setData($data); 
if ($inputFilter->isValid()) { 
    //echo "The form is valid\n"; 
} else { 
    // Maybe set the default here? 
    // but with 24 different fields, how can I know which one caused the error? 

    //echo "The form is not valid\n"; 
} 
+0

Зачем хранить недопустимые данные? Для меня это не имеет смысла. Если вам нужны значения по умолчанию, заполните форму данными по умолчанию при рендеринге формы, а не после ее проверки. – Sam

+0

@ Сэм, как я уже сказал, нет формы. Это «stdin» (электронная почта приходит на сервер, сервер отправляет электронное письмо на этот скрипт). Вот почему я не могу просто ошибиться и вернуться ... Мне нужно очистить любые плохие данные, а затем сохранить их в базе данных. Как только электронная почта попадет в скрипт, если я не могу его проверить, это просто потеряйте навсегда. – Josh

ответ

2

Хорошо, извините, что я не получил задание в первый раз. Идя Источник BaseInputFilter, есть функция называется getInvalidInput(), так что мое предположение, что вы можете сделать следующее:

$defaultData = array(
    'elementName' => 'Default Value' 
); 
$returnData = array(); 

if (false === $inputFilter->isValid()) { 
    $falseInputs = $inputFilter->getInvalidInput(); 

    foreach ($falseInputs as $input) { 
     $returnData[$input->getName()] = $defaultData[$input->getName()]; 
    } 
} 

$goodInputs = $inputFilter->getValidInput(); 

$finalData = array_merge($goodInputs, returnData); 

Это, однако, не проверенного кода. Я не уверен, что есть $input->getName(). Возможно, вам придется соответствующим образом отрегулировать эту часть. Я совершенно уверен, что это должно быть в состоянии начать работать, надеюсь;)

+0

Я дам вам попробовать и наградить вас в ближайшее время :-) – Josh

+0

@Josh Из любопытства, я понял, вы его работали? – Sam

+0

В настоящее время я работаю над этим сегодня :-) Я дам вам знать (надеюсь) до конца сегодняшнего дня. Еще раз спасибо Сэм – Josh

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