|string> */ public function rules(): array { return [ 'name' => 'required|string|max:191|unique:client_groups,name', 'description' => 'nullable|string', 'client_ids' => 'sometimes|array', 'client_ids.*' => 'integer|distinct|exists:clients,id', ]; } public function messages(): array { return [ 'name.required' => 'Le nom du groupe est obligatoire.', 'name.string' => 'Le nom du groupe doit être une chaîne de caractères.', 'name.max' => 'Le nom du groupe ne peut pas dépasser 191 caractères.', 'name.unique' => 'Un groupe avec ce nom existe déjà.', 'description.string' => 'La description doit être une chaîne de caractères.', 'client_ids.array' => 'La liste des clients doit être un tableau.', 'client_ids.*.integer' => 'Chaque ID client doit être un entier.', 'client_ids.*.distinct' => 'Un client ne peut pas être sélectionné plusieurs fois.', 'client_ids.*.exists' => 'Un ou plusieurs clients sélectionnés sont introuvables.', ]; } }