Php 使用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

我正在尝试为我的模型实现自定义验证。我目前正在成功地使用Phalcon库中包含的验证器,但当我尝试实现我的验证器时,它不起作用。这是我的密码:

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