根据用户输入ZF 1设置验证器

时间:2014-05-12 14:25:39

标签: php validation zend-framework

是否可以根据用户输入在验证链中添加新的验证器?

实施例: 假设我们有一个带有无线电选择的表格,它指定了1..10范围内的输入数量。

<label><input type="radio" name="number" id="number-1" value="1">1</label>
[...]
<label><input type="radio" name="number" id="number-10" value="10">10</label>

在此字段之后有10个文本输入,没有&#34; notEmpty&#34;验证器,在用户点击其中一个无线电之前用jquery隐藏,因此如果用户选择1而不是5或10,表单将验证。

我的问题是,在验证无线电字段期间,我可以以某种方式根据所选的无线电值将验证器设置为指定的文本输入,例如在我对该字段的自定义验证器中。

我以前的想法是创建自定义验证器并将其应用于每个文本输入。

2 个答案:

答案 0 :(得分:1)

是的,你可以,但你需要定义哪个无线电选择有哪些验证器。

可能在您的操作中或直接在您的 Zend_Form 中。

您可以在表单中覆盖 isValid()方法,例如给出。

或者,首先检查广播的值,然后在 addValidator()之后检查表单元素。

示例

$form = new Application_Form_Test();

$radio = $this->_getParam('radio','default_value');

if($radio=='default_value') {
    $form->myfieldid->addValidator('NotEmpty');
}

if($form->isValid($this->getRequest()->getPost())) {
    //valid form!
}

答案 1 :(得分:0)

<input>字段设置为具有与单选按钮一致的命名方案。然后尝试类似的事情:

$(":radio").on("click", function() {

    var textInputName = $(this).id + "text";

    //Perform validation

});

这里的想法是您的文本输入将被命名为<input type="text" id="number-1text" />等,以便您可以使用上面的代码通过将其与所单击的单选按钮的ID相关联来轻松调用正确的文本输入。