Yii2在保存时修剪所有内容

Yii2在保存时修剪所有内容,yii2,trim,behavior,Yii2,Trim,Behavior,Yii2框架。为通用模型创建通用行为的想法: 在验证之前,修剪模型中的所有字段 如果是数组,则修剪数组中的所有值 我想知道为什么在Yii2内核中不存在这种可能性。或者我错了。是吗 如果我修剪所有字段,会遇到什么问题 您可以创建行为并将其附加到您的模型上 1) 在common/components中创建行为TrimBehavior <?php namespace common\components; use yii\db\ActiveRecord; use yii\base\Beha

Yii2框架。为通用模型创建通用行为的想法:

  • 在验证之前,修剪模型中的所有字段
  • 如果是数组,则修剪数组中的所有值

  • 我想知道为什么在Yii2内核中不存在这种可能性。或者我错了。是吗

  • 如果我修剪所有字段,会遇到什么问题


您可以创建行为并将其附加到您的模型上

1) 在
common/components
中创建行为
TrimBehavior

<?php

namespace common\components;

use yii\db\ActiveRecord;
use yii\base\Behavior;

class TrimBehavior extends Behavior
{

    public function events()
    {
        return [
            ActiveRecord::EVENT_BEFORE_VALIDATE => 'beforeValidate',
        ];
    }

    public function beforeValidate($event)
    {
        $attributes = $this->owner->attributes;
        foreach($attributes as $key => $value) { //For all model attributes
            $this->owner->$key = trim($this->owner->$key);
        }
    }
}

它取决于业务逻辑。如果您真的需要它,那么就可以了。

您可以使用
trim
规则,是的,但在这种情况下,我必须为每个模型和我要修剪的所有字段编写此规则。我想对所有的车型都做一次修改,因为你完全正确,这正是我想要的。但是我会面临什么潜在的问题呢?是否字段将是数组或相关记录,或任何其他内容。您必须检查使用is_array()或根据每次需要的不同内容。是的,我完全同意。
//...
use common\components\TrimBehavior;
//...

/**
 * Returns a list of behaviors that this component should behave as.
 *
 * @return array
 */
public function behaviors()
{
    return [
        [
            'class' => TrimBehavior::className(),
        ],
    ];
}