Phalcon PHP-表单和模型验证

Phalcon PHP-表单和模型验证,php,validation,phalcon,Php,Validation,Phalcon,Phalcon支持2个验证组件: Phalcon\Validation\Validator Phalcon\Mvc\Model\Validator 我不知道如何在我的情况下使用它们。我有一份登记表: csrf 用户名 密码 重复密码 电子邮件 重复电子邮件 提交按钮 我创建了一份登记表,如下所示: class RegistrationForm extends \Phalcon\Forms\Form { public function initialize() {

Phalcon支持2个验证组件:

Phalcon\Validation\Validator
Phalcon\Mvc\Model\Validator
我不知道如何在我的情况下使用它们。我有一份登记表:

  • csrf
  • 用户名
  • 密码
  • 重复密码
  • 电子邮件
  • 重复电子邮件
  • 提交按钮
我创建了一份登记表,如下所示:

class RegistrationForm extends \Phalcon\Forms\Form
{
    public function initialize()
    {
        $csrf = new \Phalcon\Forms\Element\Hidden('csrf');
        $csrf->addValidator(new \Phalcon\Validation\Validator\Identical(array(
            'value' => $this->security->getSessionToken(),
            'message' => 'CSRF validation failed'
        )));

        $username = new \Phalcon\Forms\Element\Text('username');
        $username->addFilter('trim');
        $username->addValidator(new PresenceOf(array(
            'message' => 'Username is required.',
        )));
        $username->addValidator(new StringLength(array(
            'min' => 6,
            'messageMinimum' => 'Username must be at least 6 characters.'
        )));

        // ...
    }
}
这是我的控制器/动作:

class UserController extends \Phalcon\Mvc\Controller
{
    public function registerAction()
    {
        $form = new RegistrationForm();
        if ($this->request->isPost()) {
            if ($form->isValid($this->request->getPost())) {
                // Test only
                var_dump($this->request->getPost());
                exit;
            } else {
                // Test only
                foreach ($form->getMessages() as $message) {
                    echo $message, '<br/>';
                }
                exit;
            }
        }

        $this->view->form = $form;
    }
}
类用户控制器扩展\Phalcon\Mvc\Controller
{
公共函数注册表操作()
{
$form=新注册表单();
如果($this->request->isPost()){
如果($form->isValid($this->request->getPost())){
//仅测试
var_dump($this->request->getPost());
出口
}否则{
//仅测试
foreach($form->getMessages()作为$message){
回显$message“
”; } 出口 } } $this->view->form=$form; } }
  • 当我们使用模型验证器时,反之亦然
  • 我们能把它们结合起来吗?如何结合
  • 我想知道使用模型和非模型验证器来检查csrf、相同密码、用户名和电子邮件唯一性的正确方法来实现注册操作

  • 谢谢你的帮助

    在将数据发送到数据库之前使用模型验证程序。通常,帖子和模型中的数据(类型/结构/层次结构)会有所不同,例如,一个表单接收与两个模型相关的输入,这两个模型都将更新。因此,在收到POST数据时,您需要检查它是否有效,在保存两个独立的模型时,您还需要检查它们是否有效

    Phalcon有一个,它是所有验证的基类。它的工作方式与上面代码中的表单验证完全相同

    我不太喜欢整个验证业务是如何在Phalcon中实现的——它没有给你一个粒度级别的控制,而且验证和验证器之间有很强的依赖性。然而,它在形式和模型验证方面做得很好。没有干净整洁的方法可以重复使用相同的验证器,但是,您可以利用您的想象力:)

    要实现注册操作,只需使用表单验证程序过滤掉用户输入。我可能错了,但是Phalcon模型会根据字段上的元数据自动验证数据,所以您只需要担心您的POST输入。大型文档详细介绍了这个主题,我相信您已经去过了