【问题标题】:Setting Validators based on user input ZF 1根据用户输入设置验证器 ZF 1
【发布时间】:2025-12-02 13:20:19
【问题描述】:

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

示例: 假设我们有一个带有单选框的表单,它指定了 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 个没有“notEmpty”验证器的文本输入,这些输入在 jquery 中隐藏,直到用户单击其中一个收音机,所以如果用户选择 1 而不是 5 或 10,则表单将验证。

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

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

【问题讨论】:

    标签: php validation zend-framework


    【解决方案1】:

    是的,您可以,但您需要定义哪个单选具有哪些验证器。

    可能在您的 Action 中或直接在您的 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!
    }
    

    【讨论】:

    • 您也可以在 Zend_Form 类中执行此操作,只需覆盖 isValid($params) 函数并首先检查无线电的值,然后在其他字段中添加或删除验证器。不要忘记使用 parent::isValid($params) 获取默认错误!干杯!
    • 这就是我要做的:)
    【解决方案2】:

    将您的&lt;input&gt; 字段设置为具有一致的命名方案,就像您的单选按钮一样。然后尝试类似:

    $(":radio").on("click", function() {
    
        var textInputName = $(this).id + "text";
    
        //Perform validation
    
    });
    

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

    【讨论】: