ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php – 如何根据另一个字段的值验证Zend_Form的字段?

2019-09-03 00:30:46  阅读:240  来源: 互联网

标签:php zend-framework zend-form zend-validate


我正在尝试向字段添加自定义验证器.它应该考虑另一个领域的价值.例如.字段A最多应为B 50%.

我已经创建了一个实现Zend_Validate_Interface的类,但显然Zend Form只将当前字段的值发送给验证器.如何让验证器接收所有内容?

解决方法:

当您在Zend_Form上调用isValid时,它将传递您传递给该方法的所有数据

$form->isValid(array('a' => 1, 'b' => 2));

您的自定义验证器将接收整个原始值数组.

示例验证器

class My_Validator_TwoVals implements Zend_Validate_Interface
{
    public function getMessages()
    {
        return array();
    }
    public function isValid($value)
    {
        print_r(func_get_args());
    }
}

示例表格

$f = new Zend_Form;
$a = $f->createElement('Text', 'a');
$b = $f->createElement('Text', 'b');
$b->addPrefixPath('My_Validator', '.', 'validate');
$b->addValidator('TwoVals');
$f->addElements(array($a, $b));

$f->isValid(array('a' => 1, 'b' => 2));

产量

Array
(
    [0] => 2
    [1] => Array
        (
            [a] => 1
            [b] => 2
        )
)

正如您所看到的,还有一个传递给isValid的第二个参数,即$context.这包含剩余的值.

另一种方法是传递第二个元素以匹配作为Validator的选项,例如

class My_Validator_TwoVals implements Zend_Validate_Interface
{
    protected $a;
    public function getMessages()
    {
        return array();
    }
    public function isValid($value)
    {
        var_dump($this->a->getValue());
    }
    public function __construct(Zend_Form_Element $a)
    {
        $this->a = $a;
    }
}

建立

$f = new Zend_Form;
$a = $f->createElement('Text', 'a');
$b = $f->createElement('Text', 'b');
$b->addPrefixPath('My_Validator', '.', 'validate');
$b->addValidator('TwoVals', false, array($a));
$f->addElements(array($a, $b));

$f->isValid(array('a' => 1, 'b' => 2));

然后将打印int(1).正如您所看到的,我们通过表单元素的API获取了该值,因此您可以应用为验证器和过滤器配置的任何内容,例如:这不是原始价值.你也可以把它设置为另一个值,等等.

另请查看Zend_Validate_Identical以了解ZF如何实现对其他表单元素的检查:

> http://framework.zend.com/svn/framework/standard/trunk/library/Zend/Validate/Identical.php

标签:php,zend-framework,zend-form,zend-validate
来源: https://codeday.me/bug/20190902/1794258.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有