Работа над существующим проектом, поэтому крайне важно сохранить структуру кода такой же, как и у других разработчиков.
Я создал новый Rule
и добавил свой Validator::extend
к boot()
. Однако я не могу получить ошибку проверки для отображения моего пользовательского сообщения. Вместо этого просто отображается значение «validation.ruleName» по умолчанию
Я пишу правило проверки, которое использует пакет проверки номера NHS ImLiam. validate()
и passes()
работают успешно. Но сообщение об ошибке никогда не меняется.
Как получить метод messages()
для отображения пользовательского вывода исключения? (Вместо «validation.nhsnumber» на скриншоте ниже?
![enter image description here](https://i.stack.imgur.com/o6mIU.png)
App \ Forms \ MyForm: (используя Kris Forms )
public function buildForm()
{
$this->add('nhs_number', 'number', [
'label' => 'NHS Number',
'rules' => 'nullable|nhsnumber',
]);
...
}
App \ Providers \ AppServiceProvider:
public function boot()
{
Validator::extend('nhsnumber', \App\Rules\ValidNhsNumber::class);
}
App \ Rules \ ValidNhsNumber :
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
use ImLiam\NhsNumber\InvalidNhsNumberException;
use ImLiam\NhsNumber\NhsNumber;
class ValidNhsNumber implements Rule
{
private $message;
/**
* Create a new rule instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value): bool
{
try {
$nhsNumber = new NhsNumber($value);
$nhsNumber->validate(); // Will throw exception here if false
return true;
} catch (InvalidNhsNumberException $e) {
$this->message = $e->getMessage();
}
}
public function validate($attribute, $value, $params): bool
{
return $this->passes($attribute, $value);
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return $this->message;
}
}