2017-12-09 3 views
0

Ich benutze Laravel 5.3Wie kann ich die Bedingung basierend auf den Parametern der Array-Daten auf den Regeln Laravel hinzufügen?

Meine Regeln Laravel dies mag:

<?php 
namespace App\Http\Requests; 
use Illuminate\Foundation\Http\FormRequest; 
class AddCartRequest extends FormRequest 
{ 
    public function rules() 
    { 
     return [ 
      'product_id'=>'required|numeric', 
      'delivery_address'=>'required', 
      'request_delivery_at' => 'required|date_format:d-m-Y H:i:s|after:120 minutes' 
     ]; 
    } 
} 

Das Ergebnis echo '<pre>';print_r($this->request->get('delivery_address'));echo '</pre>'; wie folgt aus:

Array 
(
    [sender_name] => chelsea 
    [postal] => 12345 
    [country] => japan 
    [city] => tokyo 
    [send_date] => 09-12-2017 
    [send_time] => 
    [information] => test 
) 

Ich möchte es so machen:

Wenn send_time ist leer, die Regeln von request_delivery_at lauten wie folgt:

'request_delivery_at' => 'required|date_format:d-m-Y H:i:s' 

Also, es ohne |after:120 minutes

Wenn Sendezeit haben Wert ist (zum Beispiel Sendezeit = 12.30.00), die Regeln der request_delivery_at wie folgt aus:

'request_delivery_at' => 'required|date_format:d-m-Y H:i:s|after:120 minutes' 

Wie kann ich es tun ?

aktualisieren:

ich so versuchen:

public function rules() 
{ 
    $send_time = $this->request->get('delivery_address')['send_time']; 

    if($send_time) 
     $validation_time = '|after:120 minutes'; 
    else 
     $validation_time = ''; 

    return [ 
     'product_id'=>'required|numeric', 
     'delivery_address'=>'required', 
     'request_delivery_at' => 'required|date_format:d-m-Y H:i:s'.$validation_time 
    ]; 
} 

scheint es

+0

da Ihre Anforderung recht komplex ist, können Sie es nicht erreichen mit Regeln Validierung bestehender, müssen Sie eine benutzerdefinierte Gültigkeitsregel erstellen, kann ich weiß aus, wenn nach 120 Minuten? –

+1

@SuccessMan sieht gut aus, möchte vielleicht überprüfen, dass var nicht null ist, bevor Sie versuchen, auf ein Array-Element zuzugreifen, obwohl ... sidenote: Das 'FormRequest' ist ein' Request' ... '$ this-> all()' '$ this-> input()' etc ... es ist ein 'Illuminate \ Http \ Request' ... Sie befinden sich bereits im Kontext der Anfrage,' $ this-> input ('delivery_address') ' – lagbox

+0

@ Lagbox, Okay. Danke für Ihre Hilfe –

Antwort

0

Ihre Frage funktioniert für mich nicht ganz klar ist, so weit zu dem, was ich verstehe, ist, Sie wollen Um eine bedingte Validierungsregel zu haben, können Sie dies auf der Grundlage der Sendezeit in der Anwesenheit des Zustellungsadressarrays

erreichen indem Sie Ihre eigenen Gültigkeitsregel oder durch Hinzufügen von Validierungen zu schaffen Überprüfung bedingt in der Steuerung es sich von selbst,

Controller-Methode ab:

if(!$request->has('delivery_address.send_time')){ 
    $rules = [ 

    ]; 

    $messages = [ 


    ]; 

    $validator = Validator::make($request->all(),$rules,$messages); 
    if($validator->fails()){ 
     $this->throwValidationException($request,$validator); 
    } 
}else{ 
    $rules = [ 

    ]; 

    $messages = [ 


    ]; 

    $validator = Validator::make($request->all(),$rules,$messages); 
    if($validator->fails()){ 
     $this->throwValidationException($request,$validator); 
    } 

} 

oder Sie können die folgende meine SO beantworten, wie beziehen sich auf individuelle Gültigkeitsregel zu machen. Date Compare in validation Laravel 5.2

+0

Ich finde die einfache Lösung. Sehen Sie sich meine Update-Frage an –

+0

das OP verwendet eine Formularanforderung – lagbox

Verwandte Themen