Zend表单:依赖字段验证

时间:2011-09-11 10:02:43

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

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

到目前为止,我已将Zend_Form_Element_Select覆盖isValid()覆盖城市选择框,我将使用$context参数获取所选国家/地区并检查该城市是否有效(适用于那个国家)。

如果国家/地区验证失败,我想跳过城市验证。例如,有人可以向国家/地区字段注入错误的值(并且国家/地区验证将失败),并且我的城市验证不应该发生并且不在db上执行该查询,它根本不应该通过验证。 / p>

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:3)

覆盖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);
}