【问题标题】:Zend Form: Dependant field validationZend Form:相关字段验证
【发布时间】:2011-09-11 10:02:43
【问题描述】:

我有一个带有两个选择框的表单:国家和城市,城市取决于所选国家。 请注意,当使用 Ajax 选择国家/地区时,城市字段会动态填充。

到目前为止,我为城市选择框扩展了Zend_Form_Element_Select 覆盖isValid(),我将使用$context 参数来获取所选国家并检查城市是否有效(对于那个国家)。

如果国家/地区验证失败,我想跳过城市验证。例如,有人可以在国家字段中注入一个错误的值(国家验证将失败),我的城市验证不应该发生,也不应该在数据库上进行查询,它根本不应该通过验证。

我怎样才能做到这一点?

【问题讨论】:

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


    【解决方案1】:

    覆盖 Form 类中的 isValid()setDefaults() 方法以在设置 country 元素时填充 city 元素。

    function isValid($data) {
        if (isset($data['country'])) {
            $this->populateCity($data['country']);
        }
        return parent::isValid($data);
    }
    
    function setDefault($name, $value) {
        if ('country' === $value) {
            $this->populateCity($value);
        }
        return parent::setDefault($name, $value);
    }
    

    【讨论】:

    • 这样当国家无效时我不会跳过数据库上的查询来选择城市。但你实际上给了我一个好主意!仅当 country 元素有效时才填充 city 元素不是更好吗?好吗?
    • 我找到了解决方案。我将编辑此答案以发布实际解决我的问题的代码并稍后接受:)
    • 我仍然没有时间编辑这个答案,所以我检查这个答案是否被接受。我只使用了 isValid() 部分。还是非常感谢!
    • 非常有用的答案 s3v3n!只是有一个小错误。我认为在 setDefault 方法中,您应该将 if 语句更改为 if('country'=== $name) 而不是 if('country'=== $value)。
    猜你喜欢
    • 2011-06-16
    • 2014-01-09
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多