7 Stimmen

Global Mutator für Laravel

Ich habe viele verschiedene Möglichkeiten, meinen Datenbankstandort einzufügen und zu aktualisieren, und ich würde gerne in der Lage sein, die trim() Eingabe der Benutzer vor dem Einfügen in die Datenbank zu machen. Ich weiß, dass ich im Modell so etwas wie unten machen kann, aber ich möchte das nicht für jedes Feld machen. Gibt es einen Weg, einen generischen Setter einzurichten, der auf alle Felder funktioniert?

Beispiel:

public function setSomFieldAttribute($value) {
     return $this->attributes['some_field'] = trim($value);
}

6voto

Antonio Carlos Ribeiro Punkte 84627

Sie können wahrscheinlich diese Methoden überschreiben:

attributes[$key] = trim($value);
        }
    }
}

Und Sie sollten nie wieder einen nicht abgeschnittenen Wert erhalten.

BEARBEITEN:

Habe dies hier getestet und es sind keine Leerzeichen vorhanden:

Route::any('test', ['as' => 'test', function()
{
    $d = Post::find(2);

    $d->title_en = "  Markdown-Beispiel  ";

    dd($d);
}]);

6voto

Marwelln Punkte 27126

Verwenden Sie Model Events hierfür und führen Sie trim für jedes Feld aus, das Sie beim Erstellen oder Aktualisieren eines Modells möchten.

class Model extends \Eloquent {
    ...
    public static function boot() {
        parent::boot();

        static::saving(function($model){
            $model->some_field = trim($model->some_field);
        });
    }
    ...
}

Beispielverwendung:

$model = new Model;
$model->some_field = '  foobar    ';
$model->save();

// $model->some_field sollte jetzt getrimmt sein

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X