2016-04-20 8 views
2

YII2 Rahmen. Die Idee, gemeinsames Verhalten für gängiges Modell zu erstellen:Yii2 trimmen alles auf sparen

  • vorher Validate schneidet alle Felder im Modell ab.
  • Wenn das Array alle Werte im Array trimmt.

    1. Ich frage mich, warum in Yii2 Kern existiert keine solche Möglichkeit. Oder ich liege falsch. Bin ich?

    2. Mit welchen Problemen könnte ich konfrontiert werden, wenn ich alle Felder trimme?

+1

Sie könnten die 'trim' Regel verwenden, http://www.yiiframework.com/doc-2.0/guide-tutorial-core-validators.html#trim – Alex

+1

ja, aber in diesem Fall muss ich diese Regel für schreiben jedes Modell und für alle Felder, die ich trimmen möchte. Ich möchte es einmal für alle Modelle richtig machen –

Antwort

6

Sie können ein Verhalten erstellen und sie an Ihren Modellen befestigen.

1) Erstellen Sie das Verhalten 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 Ihrer Modelle fügen Sie folgendes:

//... 
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-Attribute auf Business-Logik abhängt. Wenn Sie es wirklich brauchen, dann ist es in Ordnung.

+0

Ja, Sie haben völlig Recht, das war genau das, was ich gesucht habe. Aber welches potentielle Problem würde ich haben? Ist das Feld ein Array oder ein verwandter Datensatz oder irgendetwas anderes? –

+0

Sie müssen überprüfen, ob Sie is_array() oder etwas anderes verwenden, was Sie jedes Mal benötigen. –

+0

Ja, da stimme ich absolut zu. –