我已经检查过Zend Framework:Zend_Validate_Db_RecordExists和 Zend_Validate_Db_NoRecordExists,并观察到您可以检查数据库表中的列,以查看表单中的值是否出现在命名列中。
我还观察到你可以根据同一行中另一列的值排除一行。
是否可以使用这些验证器验证密码是否与用户名匹配?
到目前为止,在我的表单中,如果用户输入正确的用户名和正确的密码(但不是必须输入此用户名的密码!),表单将验证输入。显然,对于登录表单或用户名/令牌激活表单,令牌或密码必须与同一行中的用户名匹配!
感谢。
$this->addElement('text', 'handle', array(
'label' => 'Username:',
'required' => true,
'filters' => array('StringTrim'),
'validators' => array(
array(
'NotEmpty', true, array('messages' => 'You must enter your username.')
),
array(
'Db_RecordExists',
false,
array (
'member_activation',
'member_username'
)
)
)
));
$this->addElement('text', 'validationCode', array(
'label' => 'Code:',
'required' => true,
'filters' => array('StringTrim'),
'validators' => array(
array(
'NotEmpty', true, array('messages' => 'You must enter your validation code.')
),
array(
'Db_RecordExists',
false,
array (
'member_activation',
'member_validationcode'
)
)
)
));
答案 0 :(得分:2)
你可以将认证解密到Zend_Validate吗?绝对?
你应该吗?没有。
如果你这样做,那你就会混淆不安。 Zend_Validate_Db_RecordExists
这些东西实际上是一种边界线,但它很方便。
但是,一旦你走上了正在考虑的道路,几乎所有的东西都会变得有效,但事实并非如此。你可能会发现自己喜欢各种各样的事情,比如ACL检查等等。
验证应该与事物的格式相关,几乎总是如此。添加对数据持久性,ACL系统或其他任何东西的依赖性只会增加内聚力。这将使测试,调试或更改代码变得更加困难。
使用Zend_Validate进行验证。确保字符串不会太长。确保这些整数>> 0.确保美国电话号码有十位数。
但是如果你需要做更深入的检查,深入研究你的持久层,并且都是关于你的业务逻辑,你最好远离简单的表单验证。
答案 1 :(得分:0)
如果您在Zend_Form
中坚持使用验证,那么您将使其依赖于您的基础框架(从域驱动设计的角度来看)并不是一件好事,因为您将部分域逻辑耦合到您的申请的外部资源。