所以我创建了一个输入过滤器(见下文),但我必须测试24个字段以确保它们都是有效的(下面只列出1个以保持这个简单)。在这种情况下,输入来自电子邮件服务器,而不是用户,因此我需要接受输入,而不是发回错误。但是,我仍然需要检查数据以确保没有人弄乱标题/字段试图弄乱一切。
所以我的问题是,如何为每个输入发送一个默认值?例如,如果邮箱长度为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 :(得分:2)
好的,抱歉我第一次没有得到正确的任务。通过BaseInputFilter的Source,有一个名为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()
是否可用。您可能需要相应地调整该部分。我很确定,这应该可以让你开始,希望;)