Php Zend表单:相关字段验证
我有一个表格,有两个选择框:国家和城市,城市取决于所选国家。 注意,当使用Ajax选择国家时,城市字段是动态填充的 到目前为止,我扩展了城市选择框的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
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)。