Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Yii2 trim everything on save

Yii2 framework. The idea to create common behavior for common model:

  • before Validate trims all fields in model.
  • if it's array trim all values in array.

    1. I'm wondered why in Yii2 core doesn't exist such possibility. Or I'm wrong. Am I?

    2. What problems could I face if I trim all fields?

like image 784
Aleksey Stetsenko Avatar asked Dec 25 '22 06:12

Aleksey Stetsenko


1 Answers

You can create a behavior and attach it at your models.

1) Create the behavior TrimBehavior in common/components.

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

2) In your models add the following:

//...
use common\components\TrimBehavior;
//...

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

Trimming attributes it depends on business logic. If you really need it then it's ok.

like image 95
Kostas Mitsarakis Avatar answered Jan 04 '23 23:01

Kostas Mitsarakis