gpt4 book ai didi

Phalcon ODM 验证消息

转载 作者:行者123 更新时间:2023-12-02 13:18:03 27 4
gpt4 key购买 nike

我正在尝试通过特殊验证事件来验证数据完整性。我的 Phalcon\Mvc\Collection 模型使用一些 Phalcon\Mvc\Model\Validator 验证器实现了validation()方法。在我的 Controller 中,我保存()该模型。如果保存操作失败,我尝试通过模型的 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 兼容吗?

感谢您的宝贵时间。

最佳答案

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

<?php

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

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;
}

}

如果您不想重复使用验证器,您可以简单地向模型添加验证规则:

<?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;
}

}

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;
}

}

关于Phalcon ODM 验证消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13873094/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com