2016-04-27 8 views
2

Ist es möglich, Validator Antworten von verschachtelten Arrays zu erweitern. Normalerweise reagiert Laravel mit der „Punktnotation“ zum Beispiel:Laravel-Validierer-Antwort geschachtelte Arrays

[ 
     'organisation.name'   => 'required|max:60|min:3', 
     'organisation.avatar'  => '', 
     'organisation.phone'   => 'required|max:25|min:5', 
     'organisation.paid_staff' => 'required|numeric' 
    ] 

ein Fehler mit organisation.name Wold Rückkehr:

{ 
    "message": "422 Unprocessable Entity", 
    "errors": { 
    "organisation.name": [ 
     "The organisation name has already been taken." 
    ] 
    }, 
    "statusCode": 422 
}; 

Wo Ich mag würde die Punktnotation als solche erweitert haben:

{ 
    "message": "422 Unprocessable Entity", 
    "errors": { 
    "organisation": { 
     "name": [ 
      "The organisation name has already been taken." 
     ] 
    } 
    }, 
    "statusCode": 422 
}; 

Kann jemand dieses Licht beleuchten?

+0

Ich würde auch gerne wissen, ob das möglich ist und wie, große Frage – rosscooper

Antwort

0

Wir haben dieses Ergebnis Methode durch die Verlängerung der App\Exceptions\Handler Klasse erreicht invalidJson() wie folgt:

/** 
* Convert a validation exception into a JSON response. 
* 
* @param \Illuminate\Http\Request $request 
* @param \Illuminate\Validation\ValidationException $exception 
* @return \Illuminate\Http\JsonResponse 
*/ 
protected function invalidJson($request, ValidationException $exception) 
{ 
    $jsonResponse = parent::invalidJson($request, $exception); 

    $original = (array) $jsonResponse->getData(); 

    $jsonResponse->setData(array_merge($original, [ 
     'statusCode' => $exception->status, 
     'errors'  => Arrays::expandDotNotationKeys((array) $original['errors']), 
    ])); 

    return $jsonResponse; 
} 

Wir haben eine Utility-Klasse haben Arrays mit einer Methode namens expandDotNotationKeys() das sieht so aus:

/** 
* Expands arrays with keys that have dot notation 
* 
* @param Array $array 
* 
* @return Array 
*/ 
public static function expandDotNotationKeys(Array $array) 
{ 
    $result = []; 

    foreach ($array as $key => $value) { 
     array_set($result, $key, $value); 
    } 

    return $result; 
} 

Fertig! Keine Notwendigkeit, die Dateien in der Muttersprache zu ändern.

0

Ich habe dies selbst noch nicht fertig, aber am docs suchen einen Hinweis geben -

In vielen Fällen können Sie Ihr Attribut bestimmte benutzerdefinierte Nachrichten in einer Sprachdatei des Führens stattdessen angeben sie direkt an die Validator. Fügen Sie dazu Ihre Nachrichten dem benutzerdefinierten Array in der Sprachdatei resources/lang/xx/validation.php hinzu.

Sprachdatei

'custom' => [ 
    'organisations' => [ 
     'name' => [ 
      'required' => 'The organisation name has already been taken!', 
     ], 
    ], 
], 
Verwandte Themen