Php 使用Phalcon模型进行自定义验证
我正在尝试为我的模型实现自定义验证。我目前正在成功地使用Phalcon库中包含的验证器,但当我尝试实现我的验证器时,它不起作用。这是我的密码:Php 使用Phalcon模型进行自定义验证,php,validation,phalcon,Php,Validation,Phalcon,我正在尝试为我的模型实现自定义验证。我目前正在成功地使用Phalcon库中包含的验证器,但当我尝试实现我的验证器时,它不起作用。这是我的密码: <?php use Phalcon\Mvc\Model\Validator; use Phalcon\Mvc\Model\ValidatorInterface; use Phalcon\Mvc\EntityInterface; class MaxMinValidator extends Validator implements Vali
<?php
use Phalcon\Mvc\Model\Validator;
use Phalcon\Mvc\Model\ValidatorInterface;
use Phalcon\Mvc\EntityInterface;
class MaxMinValidator extends Validator implements ValidatorInterface
{
public function validate(EntityInterface $model)
{
$field = $this->getOption('field');
$min = $this->getOption('min');
$max = $this->getOption('max');
$value = $model->$field;
if ($min <= $value && $value <= $max) {
$this->appendMessage(
"The field doesn't have the right range of values",
$field,
"MaxMinValidator"
);
return false;
}
return true;
}
}
类已正确加载,但未执行验证函数,并且我的代码在尝试验证后停止执行。
注意:这与找到的代码完全相同。您是否检查了整个功能
public function validation()
{
$this->validate(new MaxMinValidator(
array(
"field" => "Email",
"min" => 10,
"max" => 100
)
));
// This line:
return $this->validationHasFailed() != true;
}
我认为您错过了运行
validationhasfiled
方法。1.检查您的验证器类是否正确加载。(创建一个函数并编写die(“sth”);)如果调用该函数导致应用程序死机,则正确加载该类
2.检查您的phalcon版本,如果它在2.0.5下,您应该将验证程序代码修改为:
<?php
use Phalcon\Mvc\Model\Validator;
use Phalcon\Mvc\Model\ValidatorInterface;
use Phalcon\Mvc\EntityInterface;
class MaxMinValidator extends Validator implements ValidatorInterface
{
public function validate(\Phalcon\Mvc\ModelInterface $model)
{
$field = $this->getOption('field');
$min = $this->getOption('min');
$max = $this->getOption('max');
$value = $model->$field;
if ($min <= $value && $value <= $max) {
$this->appendMessage(
"The field doesn't have the right range of values",
$field,
"MaxMinValidator"
);
return false;
}
return true;
}
}
我有这样一行代码:如果($this->validationhasfiled()==true){return false;}尽管它甚至没有机会得到那一行代码。嗯,那么它会有一些不同的东西。我会更深入地研究它-我自己对此很好奇。可能是版本2.0中的一个bug,如果同样的事情发生在你身上,我会尝试更新到2.0.5,如果仍然发生,我会在github上打开一个问题。你在哪里创建了你的类?你注册了目录或名称空间吗?我在一个验证程序目录下创建了这个类,我已经在引导文件中注册了这个目录。你的phalcon是什么版本的?(从phpinfo()检查)
<?php
use Phalcon\Mvc\Model\Validator;
use Phalcon\Mvc\Model\ValidatorInterface;
use Phalcon\Mvc\EntityInterface;
class MaxMinValidator extends Validator implements ValidatorInterface
{
public function validate(\Phalcon\Mvc\ModelInterface $model)
{
$field = $this->getOption('field');
$min = $this->getOption('min');
$max = $this->getOption('max');
$value = $model->$field;
if ($min <= $value && $value <= $max) {
$this->appendMessage(
"The field doesn't have the right range of values",
$field,
"MaxMinValidator"
);
return false;
}
return true;
}
}
public function getMessages() {
$messages = array();
foreach (parent::getMessages() as $message) {
switch ($message->getType()) {
case 'InvalidCreateAttempt':
$messages[] = 'The record cannot be created because it already exists';
break;
case 'InvalidUpdateAttempt':
$messages[] = 'The record cannot be updated because it already exists';
break;
case 'PresenceOf':
$messages[] = 'The field ' . $message->getField() . ' is mandatory';
break;
case 'MaxMinValidator':
$messages[] = 'The field ' . $message->getField() . ' is not in range';
break;
}
}
return $messages;
}