处理现有项目,因此使代码结构与其他开发人员相同是至关重要的。
我创建了一个新的Rule
,并将我的Validator::extend
添加到了boot()
。但是,我无法获得验证错误来显示我的自定义消息。而是仅显示默认的“ validation.ruleName”
我正在编写使用ImLiam的NHS Number验证包的验证规则。 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;
}
}
您的邮件属性为空。 Laravels验证器将尝试获取调用您的message()
方法的错误消息,如果未返回任何内容,它将使用get_class($this)
,然后尝试构造错误消息。
此方法可以返回翻译占位符,例如validation.nhsnumber
,也可以返回实际的消息。在您给出的示例中,它只是不返回任何内容。
您是否尝试转储$this->message;
?如果转储它会显示什么?您甚至到达public function message()
吗?尝试将dd($this-message)
放在message()
方法中。
编辑:
在catch
中,您什么也不返回。输入catch
时,不会返回false
或true
。返回null
。