2017-02-06 3 views
1

In Laravel 5.3 kann ich als Parameter für die Regel aktuelle Instanz des Modells übergeben?Übergeben der aktuellen Instanz an Validator in Laravel

Ich möchte die Regel, die aktuellen Wert eines Feldes in meinem Modell überprüft und erlaubt oder verweigert, um dieses Feld auf einen anderen Wert festzulegen.

Das Problem ist: Validator erhält nur neuen Wert, aber ich möchte auch alten Wert überprüfen.

Antwort

1

Wenn dies noch erforderlich ist:

können Sie vierte Argument verwenden $customAttributes der statischen Methode Illuminate\Support\Facades\Validator::make. In diesem Argument können Sie alles, was Sie wollen, in Ihrem Fall passieren - bestimmte Instanz des Modells:

$order = new Order(); // <!-- create or load for DB instance of your model 

/* 
* create validator for validation of the some $requestForValidation 
* by some $validationRules 
*/ 
$validator = \Illuminate\Support\Facades\Validator::make($requestForValidation, 
$validationRules, [], [ 
    'instance' => $order, 
]); 

Und in Ihrer benutzerdefinierten Gültigkeitsregel Sie diese benutzerdefinierte Attribute wie folgt erreichen:

Validator::extend('customValidationRule', function ($attribute, $value, 
$parameters, $validator) { 
    $validator->customAttributes['instance']; // <!-- here is your instance 
}); 
0

Wenn ich richtig verstanden habe, denken Sie vielleicht an exists Validierungsregel? in Laravel doc: https://laravel.com/docs/5.3/validation#rule-exists

+0

nein, Ich brauche Datenbank nicht abzufragen. Ich möchte die aktuelle Instanz in die Validierungsregel übernehmen. –

1

Sie können die Methode merge verwenden, um vor der Validierung einen alten Wert hinzuzufügen.

public function store(Request $request) 
{ 
    $request->merge(['old_key' => 'Value']); 
    $this->validate($request, [ 
     'old_key' => 'required' 
    ]); 
} 
Verwandte Themen