0

そこで、入力フィルターを作成しました(以下を参照)が、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";
}
4

1 に答える 1

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()。それに応じてその部分を調整する必要があるかもしれません。うまくいけば、これであなたが始められるはずですが、私はかなり確信しています;)

于 2013-02-08T19:35:05.603 に答える