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
Essaye ça:
public function createSomeResource(Request $request)
{
$this->validate($request, [
'items' => 'present|array',
];
...
}
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.
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);
}
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'