1

我检查了 Zend 框架: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'
                    )

                )

        )           

    ));
4

2 回答 2

2

你能把认证硬塞进 Zend_Validate 吗?绝对地?

你应该吗?一定不行。

如果你这样做了,你就是在混淆顾虑。这些Zend_Validate_Db_RecordExists东西实际上是一种边界线,但它很方便。

但是,一旦你走上你正在考虑的道路,几乎所有事情都会成为验证,而实际上并非如此。你可能会发现自己在硬塞各种东西,比如 ACL 检查等。

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

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

但是,如果您需要进行更深入的检查,深入到您的持久层,并且全部与您的业务逻辑有关,那么您最好在远离简单表单验证的地方进行检查。

于 2011-10-22T03:45:17.923 回答
0

如果您坚持验证,您Zend_Form将使其依赖于您的底层框架(从域驱动设计的角度来看)这不是一件好事,因为您将域逻辑的一部分耦合到应用程序的外部资源。

于 2012-01-02T16:24:02.787 回答