Zend - 您可以使用验证器检查Zend_Form中的用户名密码组合吗?

时间:2011-10-21 20:06:17

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

我已经检查过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'
                    )

                )

        )           

    ));

2 个答案:

答案 0 :(得分:2)

你可以将认证解密到Zend_Validate吗?绝对?

你应该吗?没有。

如果你这样做,那你就会混淆不安。 Zend_Validate_Db_RecordExists这些东西实际上是一种边界线,但它很方便。

但是,一旦你走上了正在考虑的道路,几乎所有的东西都会变得有效,但事实并非如此。你可能会发现自己喜欢各种各样的事情,比如ACL检查等等。

验证应该与事物的格式相关,几乎总是如此。添加对数据持久性,ACL系统或其他任何东西的依赖性只会增加内聚力。这将使测试,调试或更改代码变得更加困难。

使用Zend_Validate进行验证。确保字符串不会太长。确保这些整数>> 0.确保美国电话号码有十位数。

但是如果你需要做更深入的检查,深入研究你的持久层,并且都是关于你的业务逻辑,你最好远离简单的表单验证。

答案 1 :(得分:0)

如果您在Zend_Form中坚持使用验证,那么您将使其依赖于您的基础框架(从域驱动设计的角度来看)并不是一件好事,因为您将部分域逻辑耦合到您的申请的外部资源。