脚本宝典收集整理的这篇文章主要介绍了php – 使用Zend Framework验证多个可选表单字段,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图通过创建扩展Zend_Validate_Abstract的自定义验证器来实现验证上下文(如建议here).问题是,如果所有可选字段都为空,则表单$context(传递给验证器类)中缺少这些字段,这种方式根本没有验证.
因此,如果你填写三个选项中的任何一个或几个(移动,家庭,工作),他们都将被验证(这很好,但为此不需要自定义验证器),但如果你没有填写它们,那么没有选择强迫客户填写至少一个字段(这是我的目标).
这是我有的:
我的表格
<?PHP class Application_Form_Application extends Zend_Form { public function inIT() { $this->setName('application'); // attach sub forms to main form $this->addSubForms(array( 'application' => $this->application(),... )); } PRivate function application() { $application = new Zend_Form_SubForm(); // custom phone validation $phone_validation = array('phone_mobile' => 'Mobile','phone_home' => 'Home','phone_work' => 'Work'); // phone mobile $app['phone_mobile'] = new Zend_Form_Element_Text('phone_mobile'); $app['phone_mobile']->setLabel('Mobile') ->adDFilter('StripTags') ->addFilter('StringTrim') ->addValidator('Regex',false,array('/^[0-9]{8}$/i')) ->addValidator(new Application_Form_PhoneMobileHomeWork($phone_validation),false); // phone home $app['phone_home'] = new Zend_Form_Element_Text('phone_home'); $app['phone_home']->setLabel('Home') ->addFilter('StripTags') ->addFilter('StringTrim') ->addValidator('Regex',array('/^[0-9]{8}$/i')) ->addValidator(new Application_Form_PhoneMobileHomeWork($phone_validation),false); // phone work $app['phone_work'] = new Zend_Form_Element_Text('phone_work'); $app['phone_work']->setLabel('Work') ->addFilter('StripTags') ->addFilter('StringTrim') ->addValidator('Regex',false); $application->AddElements($app); } } ?>
2.自定义验证器
<?PHP class Application_Form_PhoneMobileHomeWork extends Zend_Validate_Abstract { const NOT_PRESENT = 'notPresent'; protected $_messageTemplates = array( self::NOT_PRESENT => 'At least one contact phone shall be provided!' ); protected $_listOfFields; public function __construct(array $listOfFields) { $this->_listOfFields = $listOfFields; var_dump($listOfFields);exit; } public function isValid($value,$context = null) { VAR_dump($context);exit; ... } ?>
验证器总是通过第一个转储($listOfFields),但是如果我将其删除,则永远不会调用isValid(),除非在某些电话字段(我们想要阻止)中键入一些数据.
当我进一步检查时,我找到了一个通过将空字段传递给$context参数来扩展Zend_Validate类的解决方案,但是如果有人知道的话,我想有更好的解决方案.
以上是脚本宝典为你收集整理的php – 使用Zend Framework验证多个可选表单字段全部内容,希望文章能够帮你解决php – 使用Zend Framework验证多个可选表单字段所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。