【问题标题】:Phalcon PHP: determine if create or update in model validation methodPhalcon PHP:确定是否在模型验证方法中创建或更新
【发布时间】:2014-09-19 20:48:43
【问题描述】:

我在 Phalcon 中创建了一个模型。在其中,我有一个 validation() 方法。在创建记录时,我想确保记录正在获得名称,但我不希望在更新时需要它。我如何使用 Phalcon 来确定?

【问题讨论】:

  • 你的验证码是什么?此外,模型是否会覆盖更新时的所有值,即,如果未指定名称,您是否正在处理name 列中以null 结尾的场景?

标签: php validation model phalcon


【解决方案1】:

在 Phalcon 的 docs 中有更好的描述。



class Robots extends \Phalcon\Mvc\Model
{

    public function initialize()
    {
        //Skips fields/columns on both INSERT/UPDATE operations
        $this->skipAttributes(array('year', 'price'));

        //Skips only when inserting
        $this->skipAttributesOnCreate(array('created_at'));

        //Skips only when updating
        $this->skipAttributesOnUpdate(array('modified_in'));
    }

}

【讨论】:

  • 嘿-感谢您的回答!我认为此功能的目的是允许数据库设置默认值(如 CURRENT_TIMESTAMP 等) - 为了解决 Phalcon 需要定义为 NOT NULL 的数据库字段的问题。不过,谢谢你指出我这一点。我支持你:)
【解决方案2】:

如果您有更复杂的事情并希望对创建和更新使用相同的“验证”方法,您可以这样做:

public function beforeValidationOnCreate()
{
    $this->_isCreate = 1;
}

public function beforeValidationOnUpdate()
{
    $this->_isCreate = 0;
}

public function validation()
{
    if ($this->_isCreate) {
        // ...
    } else {
        // ...
    }
}

【讨论】:

    【解决方案3】:

    您可以在名为 beforeValidationOnCreate 或 beforeCreate 的函数中进行验证,它只会在创建时被命中而不是更新

    public function beforeValidationOnCreate()
    {
        //Do the validations
    }
    

    class MyModel extends \Phalcon\Mvc\Model
    {
        public function beforeCreate()
        {
            //Do the validations
        }
    }
    

    查看下面的链接了解更多您可以使用的事件:

    Phalcon PHP Events and Events Manager

    希望接近你所需要的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      相关资源
      最近更新 更多