Phalcon ODM验证消息

lob*_*ome 3 phalcon

我试图通过特殊验证事件验证数据完整性.我的Phalcon\Mvc\Collection模型使用一些Phalcon\Mvc\Model\Validator验证器实现validation()方法.在我的控制器中,我保存()该模型.如果保存操作失败,我尝试通过模型的getMessages()方法输出错误消息.换句话说,我按照文档http://docs.phalconphp.com/en/latest/reference/odm.html中提供的示例进行操作.

但是,我得到一个错误,即getMessages()方法不存在.我的Phalcon版本是0.7.0.我检查了API http://docs.phalconphp.com/en/latest/api/Phalcon_Mvc_Collection.html,它没有显示getMessages()方法.我还对Phalcon\Mvc\Collection类进行了反射测试,并确认了该观察结果.

该文档还指出我们可以使用Phalcon\Mvc\Collection\Validator实现我们自己的验证器.但是,似乎这个类不存在.

所以,我的问题是:

  1. 如何显示验证结果的错误消息?
  2. 如何创建自定义验证器?
  3. Phalcon\Mvc\Model\Validator\Uniqueness验证器NOSQL是否兼容?

感谢您的时间.

twi*_*tra 8

你是对的,实现中缺少getMessages()方法.现在,您可以将它添加到模型中,同时将其正式添加到C类:

<?php

class Users extends Phalcon\Mvc\Collection
{
   public function getMessages()
   {
       return $this->_errorMessages;
   }
}
Run Code Online (Sandbox Code Playgroud)

1-如何显示验证结果的错误消息?检查上面

2-如何创建自定义验证器?

验证器是继承自"Phalcon\Mvc\Model\Validator"并实现"Phalcon\Mvc\Model\ValidatorInterface"的类:

<?php

use Phalcon\Mvc\Model\Validator,
Phalcon\Mvc\Model\ValidatorInterface;

class HashValidator extends Validator implements ValidatorInterface
{

    public function validate($record)
    {
        $fieldName = $this->getOption('field');
        if (!preg_match('/[a-z]+/', $fieldName) {           
            $this->appendMessage("The hash is not valid", $fieldName, "Hash");
            return false;
        }
        return true;
    }

}
Run Code Online (Sandbox Code Playgroud)

如果您不想重用验证器,只需向模型添加验证规则即可:

<?php

use Phalcon\Mvc\Model\Message;

class Users extends Phalcon\Mvc\Collection
{

    public function validation()
    {
        if (!preg_match('/[a-z]+/', $this->password) {          
            $this->_errorMessages[] = new Message("The hash is not valid", "password", "Hash");
            return false;
        }
        return true;
    }

    public function getMessages()
    {
        return $this->_errorMessages;
    }

}
Run Code Online (Sandbox Code Playgroud)

3- Phalcon\Mvc\Model\Validator\Uniqueness验证器NOSQL是否兼容?此验证器仅与SQL模型兼容,但是,您可以通过以下方式创建验证器以使用NoSQL集合:

<?php

use Phalcon\Mvc\Model\Validator,
Phalcon\Mvc\Model\ValidatorInterface;

class UniqueValidator extends Validator implements ValidatorInterface
{

    public function validate($record)
    {
        $field = $this->getOption('field');
        if ($record->count(array("field" => $record->readAttribute($field)))) {
            $this->appendMessage("The ".$field." must be unique", $fieldName, "Unique");
            return false;
        }
        return true;
    }

}
Run Code Online (Sandbox Code Playgroud)