【发布时间】:2020-06-02 07:41:12
【问题描述】:
处理现有项目,因此保持与其他开发人员相同的代码结构至关重要。
我创建了一个新的Rule 并将我的Validator::extend 添加到boot()。但是我无法获得验证错误来显示我的自定义消息。相反只是显示一个默认的“validation.ruleName”
我正在编写一个使用 ImLiam 的 NHS 号码验证包的验证规则。 validate() 和 passes() 工作成功。但错误信息永远不会改变。
如何获得messages() 方法来显示异常的自定义输出? (而不是下面屏幕截图中的“validation.nhsnumber”?
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;
}
}
【问题讨论】:
标签: laravel validation laravel-5.8 laravel-6 laravel-validation