Laravel 13.24 Nouveauté Publié le

Restreindre les clés d'un tableau avec array_keys

Une règle de validation pour « ce tableau ne contient que ces clés » : plus de closure qui compare array_keys() à une liste.

Notions abordées : Validation

Nouveau dans Laravel 13.24. Pour refuser un tableau qui contient des clés inattendues, il fallait une closure qui compare array_keys() à une liste. On pouvait aussi détourner array:colonne,sens, dont le message d'erreur (« doit être un tableau ») ne dit pas ce qui ne va pas. La règle array_keys dit exactement cela : ce tableau ne peut contenir que ces clés.

Avant

'tri' => ['sometimes', 'bail', 'array', function (string $attribute, mixed $value, Closure $fail) {
    if (array_diff(array_keys($value), ['colonne', 'sens']) !== []) {
        $fail('Le champ :attribute ne doit contenir que les clés colonne et sens.');
    }
}],

Depuis Laravel 13.24

'tri' => ['sometimes', 'array', Rule::arrayKeys(['colonne', 'sens'])],
// ou : 'array_keys:colonne,sens'

Les clés restent facultatives : pour les exiger, il y a required_array_keys.

À faire

Dans ArticleController, remplacez la closure par la règle array_keys. Le tri et le refus d'une clé inconnue ne doivent pas changer. L'onglet « Requêtes » propose les deux cas.

D'où vient la fonctionnalité : la pull request d'origine.