php - 从 Zend InputFilter 检索错误消息

标签 php zend-form zend-framework2 zend-inputfilter

$app->post('/', function () use ($app) {

    $email = new Input('email');
    $email->getValidatorChain()
          ->addValidator(new Validator\EmailAddress());

    $password = new Input('name');
    $password->getValidatorChain()
             ->addValidator(new Validator\StringLength(1));

    $inputFilter = new InputFilter();
    $inputFilter->add($email)
                ->add($password)
                ->setData($_POST);

    if ($inputFilter->isValid()) {

        // do stuff

        $app->redirect('/');

    } else {

        $field_errors = array();

        foreach ($inputFilter->getInvalidInput() as $field => $error) {
            foreach ($error->getMessages() as $message) {
                $field_errors[] = str_replace('Value', ucfirst($field), $message);
            }
        }

        $app->render('index.php', array('field_errors' => $field_errors));

    }
});

我目前有使用 Slim Framework 和 Zend InputFilter 的上述代码。但是,我想检索错误消息。我不断收到“Value ....”,因此我对它们执行了 str_replace 以获得 Email is not a valid email 如下所示:

        $field_errors = array();

        foreach ($inputFilter->getInvalidInput() as $field => $error) {
            foreach ($error->getMessages() as $message) {
                $field_errors[] = str_replace('Value', ucfirst($field), $message);
            }
        }

这是从 Zend InputFilter 获取错误消息的正确方法还是还有其他方法?

最佳答案

您只需调用 $inputFilter->getMessages() 即可获取键控数组:

array(
    'input' -> 'message', 
    'inputtwo' => 'anothermessage',
);

这在内部为您使用 getInvalidInput(),因此不需要那些嵌套的 foreach 循环,对 getMessages() 的一次调用应该没问题。

关于php - 从 Zend InputFilter 检索错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13415866/

相关文章:

javascript - 使用 javascript 获取复选框属性(数组)

php mysql 回显排序

php - Zend Framework 默认值形式

php - 用于多复选框的 zend 表单从标签中删除输入

php - zend framework 2 tablegateway 选择出错

php - 如何为 Zend Cache Storage 设置过期时间?

php - 使用 PHP 从动态表中计数

php - 选择选项中的 zend 表单自定义属性?

php - ZF2 将自定义属性添加到选择表单元素中的选项

php - 从另一个表单添加数据时,在同一页面上提交数据的 $_POST/$_GET 会被删除