2013-02-08 49 views
0

所以我創建了一個輸入過濾器(見下面),但我必須測試24個字段以確保它們都是有效的(下面只列出1個以保持這一點)。在這種情況下,輸入來自電子郵件服務器,而不是用戶,所以我需要接受輸入,而不是發回錯誤。但是,我仍然需要檢查數據,以確保沒有人搞亂標題/字段,試圖搞砸一切。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 2013-02-08 16:56:33

+0

@Sam就像我說的,沒有任何形式。這是'stdin'(電子郵件來到服務器,服務器管道電子郵件到這個腳本)。這就是爲什麼我不能只是錯誤和返回...我需要清理任何不良數據,然後將其存儲在數據庫中..一旦電子郵件碰到腳本,如果我不能驗證它,它會只是永遠失去。 – Josh 2013-02-08 17:07:52

回答

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 2013-02-08 19:41:54

+0

@Josh出於對自己的好奇心,你有沒有得到它的工作? – Sam 2013-02-10 10:14:57

+0

我目前正在研究它:-)在今天結束之前,我會讓你知道(我希望)。再次感謝薩姆 – Josh 2013-02-10 16:54:54

相關問題