Reputation: 5004
Brief:
I have validate request value for empty string.
Code:
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();
}
Also tired with cutom rule.
Rule code:
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.";
}
Rule testing code:
if(isset($request->name)) {
$this->validate($request, [
'name' => [
new IsEmptyString
]
]);
$user->name= $request->name;
$user->save();
}
Question:
Where I've errors? Why laravel not sending validation error message when I check request value for empty string?
Thanks!
Upvotes: 2
Views: 575
Reputation: 63
In your situation, you must change your condition to:
if(array_key_exists('name', $request->all())) {
}
When you check isset($request->name)
and this condition result return false and the validation code does not even run and for the fact that the conditions returned false.
Generally, your working code looks like this:
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();
}
Upvotes: 1
Reputation: 4499
Remove the if()
condition. and then add the required
rule to the validation.
$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();
Upvotes: 0