【问题标题】:Where do you put validation logic when using Zend Framework?使用 Zend Framework 时,您将验证逻辑放在哪里?
【发布时间】:2009-01-05 15:33:20
【问题描述】:

我正在寻找一些关于人们如何在 Zend 框架中实现验证逻辑的示例。

我的理想实现是将验证保留在控制器之外,并允许验证“确认密码”字段和文件上传。

【问题讨论】:

    标签: php zend-framework


    【解决方案1】:

    您的表单是否使用Zend_Form?我倾向于在每个Zend_Form_Element 的表单中应用验证器。我就是这样做的:

    class Form_Login extends Zend_Form
    {
        public function init() {
            $this->setMethod('post');
    
            $validator = new Zend_Validate_Regex('([A-Za-z0-9]+)');
            $validator->setMessage(
            'Your username can only contain letters, numbers and underscores (_).');
    
            $username = new Zend_Form_Element_Text('username');
            $username->setLabel('Your Username');
            $username->setDescription('The username you use to login');
            $username->setAllowEmpty(false);
            $username->setRequired(true);
            $username->addValidator($validator);
    
            $submit = new Zend_Form_Submit('login');
            $submit->setLabel('Login');
    
            $this->addElements(array($username, $submit));
        }
    }
    

    (Customising error messages)

    然后在你的控制器中:

    // $form is an instance of the extended Zend_Form
    if (!$form->isValid()) {
        $validator->getMessages()
        // flashMessenger helpers or just simple view appends
    }
    

    我的理想实现是将验证保留在控制器之外,并允许验证“确认密码”字段和文件上传。

    我在参考指南中看到了确认密码验证器的提及(但现在找不到它们,典型的),但在 Google 上应该很容易找到。

    文件上传肯定需要您write a custom validator。

    【讨论】:

      【解决方案2】:

      也许你应该有一个look at。 Matthew Weier O'Phinney(Zend Fraework 核心开发人员之一)展示了一种需要习惯的方法 - 但值得一看。

      【讨论】:

        【解决方案3】:

        是的,这是进行数据验证的推荐方式。谢谢!我希望看到更多示例。

        谈到 HTML,我有点控制狂,所以我尽量远离 Zend_Form。我知道它可以进行大量定制,但我记得在某些时候遇到了障碍,所以我决定坚持使用纯 html 表单。

        【讨论】:

        • 我在 Zend_Form 的装饰器方面遇到了一点麻烦(现在仍然如此),但我刚刚学会了通过正确设置 dl/dd/dt 的样式来解决这个问题 :)
        • 我遇到了同样的问题,直到我发现这个:zendframework.com/manual/en/… 用 HTML 编写表单显示,而不是让装饰器为您完成工作。
        【解决方案4】:

        对于“确认密码”类型的验证,请查看 Zym 框架(Zend 框架扩展)。它有一个用于这个确切目的的内置验证器。试试Zym_Validate_Confirm 类。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多