Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend表单:相关字段验证_Php_Zend Framework_Zend Form_Zend Form Element - Fatal编程技术网

Php Zend表单:相关字段验证

Php Zend表单:相关字段验证,php,zend-framework,zend-form,zend-form-element,Php,Zend Framework,Zend Form,Zend Form Element,我有一个表格,有两个选择框:国家和城市,城市取决于所选国家。 注意,当使用Ajax选择国家时,城市字段是动态填充的 到目前为止,我扩展了城市选择框的Zend\u Form\u Element\u Select覆盖isValid() 如果国家/地区验证失败,我想跳过城市验证。例如,有人可以向country字段中注入一个坏值(country验证将失败),my city验证不应该发生,也不应该在db上执行该查询,它不应该通过验证 如何实现这一点?在表单类中重写isValid()和setDefaults

我有一个表格,有两个选择框:国家和城市,城市取决于所选国家。 注意,当使用Ajax选择国家时,城市字段是动态填充的

到目前为止,我扩展了城市选择框的
Zend\u Form\u Element\u Select
覆盖
isValid()

如果国家/地区验证失败,我想跳过城市验证。例如,有人可以向country字段中注入一个坏值(country验证将失败),my city验证不应该发生,也不应该在db上执行该查询,它不应该通过验证

如何实现这一点?

在表单类中重写
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);
}
在表单类中重写
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)。这样,当国家无效时,我不会跳过数据库上的查询来选择城市。但你真的给了我一个好主意!如果country元素有效,那么填充city元素不是更好吗?没事吧?我有办法了。我将编辑此答案,以发布实际解决问题的代码,并在稍后接受:)我仍然没有时间编辑此答案,因此我将此答案检查为已接受。我只使用了isValid()部分。无论如何,非常感谢!非常有用的答案s3v3n!只是有点小错误。在setDefault方法中,我认为应该将if语句改为if('country'==$name),而不是if('country'=$value)。