|string> */ public function rules(): array { return [ 'client_id' => 'required|exists:clients,id', 'first_name' => 'nullable|string|max:191', 'last_name' => 'nullable|string|max:191', 'email' => 'nullable|email|max:191', 'phone' => 'nullable|string|max:50', 'role' => 'nullable|string|max:191', ]; } public function messages(): array { return [ 'client_id.required' => 'Le client est obligatoire.', 'client_id.exists' => 'Le client sélectionné n\'existe pas.', 'first_name.string' => 'Le prénom doit être une chaîne de caractères.', 'first_name.max' => 'Le prénom ne peut pas dépasser 191 caractères.', 'last_name.string' => 'Le nom doit être une chaîne de caractères.', 'last_name.max' => 'Le nom ne peut pas dépasser 191 caractères.', 'email.email' => 'L\'adresse email doit être valide.', 'email.max' => 'L\'adresse email ne peut pas dépasser 191 caractères.', 'phone.max' => 'Le téléphone ne peut pas dépasser 50 caractères.', 'role.max' => 'Le rôle ne peut pas dépasser 191 caractères.', ]; } public function withValidator($validator) { $validator->after(function ($validator) { if (empty($this->first_name) && empty($this->last_name) && empty($this->email) && empty($this->phone)) { $validator->errors()->add( 'general', 'Au moins un champ (prénom, nom, email ou téléphone) doit être renseigné.' ); } }); } }