如何覆盖由Phalcon-devtools生成的Not Null项目的错误消息?

时间:2017-11-29 21:36:20

标签: php phalcon

问题

对于由Phalcon-devtools生成的模型的表定义上设置了Not Null约束的项目,自动设置PresenceOf的验证规则,但同时消息为&#34; < strong> 名称是必需的 &#34;在PresenceOf错误时它将自动完成。

您不必更改PresenceOf的验证规则,但请教我如何覆盖此错误消息。

概述

  • 使用以下命令使用Phalcon-devtools生成模型。

    phalcon model user
    
  • 即使您没有专门设置验证规则,如果您保存它而不输入Not Null的输入项name,则会发生错误并且您可以获取消息&#34; 名称是必需的 &#34;。

  • 要使错误消息成为您自己的字符串,请将以下内容添加到用户模型中。

    $validator = new Validation();
        $validator->add(
           'name',
            new PresenceOf([
               'message' => "required",
            ])
        );
    
  • 这是假设获得&#34; 必需 &#34;作为错误消息,但结果不会改变,并且需要 名称 &#34;。

源代码

<?php

use Phalcon\Mvc\Controller;
use Phalcon\Validation;
use Phalcon\Validation\Validator\PresenceOf;

class User extends ModelBase
{
    /**
     *
     * @var string
     * @Column(type="string", length=767, nullable=false)
     */
    public $name;

    public function validation()
    {
        $validator = new Validation();

        $validator->add(
            'name',
            new PresenceOf([
                'message' => "required",
            ])
        );

        return $this->validate($validator);
    }

    /**
     * Initialize method for model.
     */
    public function initialize()
    {
        $this->setSchema("lashca");
        $this->setSource("user");
    }

    /**
     * Returns table name mapped in the model.
     *
     * @return string
     */
    public function getSource()
    {
        return 'user';
    }

    /**
     * Allows to query a set of records that match the specified conditions
     *
     * @param mixed $parameters
     * @return User[]|User|\Phalcon\Mvc\Model\ResultSetInterface
     */
    public static function find($parameters = null)
    {
        return parent::find($parameters);
    }

    /**
     * Allows to query the first record that match the specified conditions
     *
     * @param mixed $parameters
     * @return User|\Phalcon\Mvc\Model\ResultInterface
     */
    public static function findFirst($parameters = null)
    {
        return parent::findFirst($parameters);
    }

}

环境

  • CentOS 7.4(x64)
  • Apache 2.4.6
  • PHP 7.0.26
  • Phalcon Framework 3.2.4
  • MySQL Ver 14.14 Distrib 5.6.38

1 个答案:

答案 0 :(得分:0)

您可以尝试将默认值直接设置到模型变量

 /**
 *
 * @var string
 * @Column(type="string", length=767, nullable=false)
 */
public $name = '';

您可以做的另一件事是直接从数据库设置默认值并将'default'RawValue作为值传递

protected function beforeValidationOnCreate() {
    if (empty($this->name)) {
        $this->name = new \Phalcon\Db\RawValue('default');
    }
}

最后,您可以禁用默认的phalcon验证

 public function initialize() {
    $this->setup(array('notNullValidations' => false));
}