@Sinnbeck My bad :) It's messages()
public function rules(): array
{
$routeName = $this->route()->getName();
$todayDate = date('Y-m-d');
return match ($routeName) {
'users.store' => $this->getStoreUserRules($todayDate),
'users.update' => $this->getUpdateUserRules($todayDate),
default => []
};
}
private function getStoreUserRules($todayDate): array
{
return [
'email' => ['required', 'email', 'unique:users,email', 'max:255'],
'password' => ['string', 'required', 'confirmed', Password::min(8)->mixedCase()->numbers()],
'first_name' => ['string', 'required', 'max:255'],
'last_name' => ['string', 'required', 'max:255'],
'middle_name' => ['nullable', 'max:255'],
'mobile_number' => ['nullable', 'regex:/^(\+63)\d{10}$/'],
'sex' => ['nullable', new Enum(Sex::class)],
'profile_picture_url' => ['nullable', 'active_url', 'max:255'],
'meta' => ['nullable', new IsJson()],
'roles' => ['required', 'array'],
'roles.*' => ['required', new Enum(Role::class)],
];
}
public function messages()
{
return [
'mobile_number.regex' => 'The mobile_number field should follow this format: +63XXXXXXXXXX.',
/** These are not working. Can't find it anywhere in Laravel 9 docs
* @see https://laracasts.com/discuss/channels/laravel/laravel-9-enum-validation-custom-message
*/
'sex.enum' => 'Valid values are `male` and `female`.',
'roles.*.enum' => 'Valid role values are `regular`, `security`, `medical`, and `health-officer`.',
];
}
Other rule messages overwrite work just fine, such as required, regex, etc. I've satisfied all requirements as well (Enums requires PHP 8.1)
Somehow sex.enum and roles.*.enum don't work -- which is kinda odd