简介:
我有一个用于验证空字符串的请求值。
代码:
if(isset($request->name)) {
$this->validate($request, [
'name' => [
function ($attribute, $value, $fail) {
if (mb_strlen(preg_replace('/\s/', '', $value)) == 0) {
$fail($attribute.' is can't be empty.');
}
}
]
]);
$user->name = $request->name;
$user->save();
}
也对角裁规则感到厌倦。
规则代码:
public function passes($attribute, $value)
{
$result = preg_replace('/\s/', '', $value);
return mb_strlen($result) == 0 ? false : true;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return "Attribute value can't be empty string.";
}
规则测试代码:
if(isset($request->name)) {
$this->validate($request, [
'name' => [
new IsEmptyString
]
]);
$user->name= $request->name;
$user->save();
}
问题:
我在哪里出错?为什么当我检查请求值是否为空字符串时,laravel为什么不发送验证错误消息?
谢谢!
答案 0 :(得分:1)
根据您的情况,您必须将条件更改为:
if(array_key_exists('name', $request->all())) {
}
当您检查isset($request->name)
时,此条件结果将返回 false ,并且验证代码甚至不会运行,并且条件会返回false。
通常,您的工作代码如下:
if(array_key_exists('name', $request->all())) {
$this->validate($request, [
'name' => [
'required',
function ($attribute, $value, $fail) {
if (mb_strlen(preg_replace('/\s/', '', $value)) == 0) {
$fail($attribute." is can't be empty.");
}
}
]
]);
$user->name = $request->name;
$user->save();
}
答案 1 :(得分:0)
删除<input [(ngModel)]="staff_book_date"
条件。然后将if()
规则添加到验证中。
required