web-dev-qa-db-fra.com

Laravel 5 - Valider le tableau comme requis, mais autoriser le passage d'un tableau vide

Je valide une demande dans Laravel 5.4 avec le validateur, consultez la documentation: https://laravel.com/docs/5.4/validation#validating-arrays

Fondamentalement, c'est ce code dans le contrôleur:

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

Je voudrais exiger la présence du champ "items" et ce code le fait, mais le problème est que la validation échoue lorsque le champ "items" est un tableau vide, c'est-à-dire. 

{
    "fields": []
}

, qui est un comportement indésirable. Je sais que c'est le comportement documenté du paramètre "required" mais je ne vois aucune solution de contournement "propre". J'ai essayé aussi:

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

mais cela échoue également, probablement parce que la documentation indique que cela fonctionne avec un champ différent après la clause "required_unless", mais je n'en suis pas tout à fait sûr. 

Pourriez-vous me suggérer un moyen d’exiger la présence du champ "items" sans interdire le tableau vide?

EDIT: une autre approche "évidente" qui m'est venue à l'esprit est d'utiliser la règle "present | array" et elle fait presque ce que je veux, mais malheureusement, une chaîne vide respecte également cette règle de validation. Laravel, peut-être pas - j'ai ouvert un numéro dans le référentiel github Laravel: https://github.com/laravel/framework/issues/18948

7
Rafael K.

Essaye ça:

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

Essayer:

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

De Laravel doc:

min: valeur Le champ en cours de validation doit avoir une valeur minimale. Les chaînes, les nombres, les tableaux et les fichiers sont évalués de la même manière que la règle de taille.

3
ImLeo

On y va mon pote ...

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

Peut-être que cela sera utile? 

taille en tableau en utilisant count 

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

ou ca

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