wake-up-neo.com

Laravel 5 - Array nach Bedarf validieren, jedoch ein leeres Array übergeben

Ich validiere eine Anforderung in Laravel 5.4 mit dem Validator. Siehe Dokumentation: https://laravel.com/docs/5.4/validation#validating-arrays

Im Grunde handelt es sich um diesen Code im Controller:

public function createSomeResource(Request $request)
{
    $this->validate($request, [
        'items' => 'required',
    ];
    ...
}

Ich möchte das Vorhandensein des Felds "items" verlangen, und dieser Code erfüllt dies, aber das Problem ist, dass die Überprüfung fehlschlägt, wenn das Feld "items" ein leeres Array ist, d. H. 

{
    "fields": []
}

, was ein unerwünschtes Verhalten ist. Ich weiß, dass dies das dokumentierte Verhalten des Parameters "required" ist, aber ich sehe keine "saubere" Problemumgehung. Ich habe auch versucht:

public function createSomeResource(Request $request)
{
    $this->validate($request, [
        'items' => 'required_unless:items,[]',
    ];
    ...
}

aber es schlägt auch fehl, wahrscheinlich, weil die Dokumentation besagt, dass es nach der Klausel "required_unless" mit einem anderen Feld arbeitet, aber ich bin mir nicht ganz sicher. 

Könnten Sie mir einen Weg vorschlagen, um das Vorhandensein des Feldes "items" zu fordern, ohne das leere Array zu verbieten?

BEARBEITEN: Ein anderer "naheliegender" Ansatz, der mir in den Sinn gekommen ist, ist die Verwendung der "present | array" -Regel und sie macht fast das, was ich will, aber leider durchläuft ein leerer String diese Validierungsregel, was möglicherweise ein Fehler ist Laravel, vielleicht auch nicht - ich habe eine Ausgabe dafür im Laravel github-Repository geöffnet: https://github.com/laravel/framework/issues/18948

7
Rafael K.

Versuche dies:

public function createSomeResource(Request $request)
{
    $this->validate($request, [
        'items' => 'present|array',
    ];
    ...
}
16
silentavt

Versuchen:

public function createSomeResource(Request $request)
{
    $this->validate($request, [
        'items' => 'required|array|min:1',
    ];
    ...
}

Aus Laravel doc:

min: Wert Das zu validierende Feld muss einen Mindestwert haben. Zeichenfolgen, Zahlen, Arrays und Dateien werden auf dieselbe Weise wie die Größenregel ausgewertet.

3
ImLeo

Hier gehen wir Kumpel ...

public function createSomeResource(Request $request)
{
    $validate_us_pls = [
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ];


    if( !empty($request->get('items')) ){
        $validate_us_pls['items'] = 'required';
    }

    $this->validate($request, $validate_us_pls);

}
2
Kabelo Tooka

wahrscheinlich sollte das funktionieren

public function rules()
{
   return [
    "items"    => "required|array|min:0",
    "items.*"  => "required|string|distinct|min:0",
  ];
}
0
sumit

Vielleicht ist das nützlich? 

größe im Array unter Verwendung der Anzahl 

 'ids'=>'present|array|size:1'

oder dieses

'users' => 'required|array|between:2,4'
0