Forked from technoknol/custom validator in laravel to validate comma separated emails.php
Created
February 23, 2018 12:50
-
-
Save vmosoti/8ef268588cbdbf33f263e4733571254b to your computer and use it in GitHub Desktop.
custom validator in laravel to validate comma separated emails.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// custom validator in laravel to validate comma separated emails. | |
\Validator::extend("emails", function($attribute, $values, $parameters) { | |
$value = explode(',', $values); | |
$rules = [ | |
'email' => 'required|email', | |
]; | |
if ($value) { | |
foreach ($value as $email) { | |
$data = [ | |
'email' => $email | |
]; | |
$validator = \Validator::make($data, $rules); | |
if ($validator->fails()) { | |
return false; | |
} | |
} | |
return true; | |
} | |
}); | |
// Custom message for that validation | |
// pass this array as third parameter in \Validator::make | |
array('emails' => ':attribute must have valid email addresses.'); | |
// Usage: | |
$rules['notifications'] = 'emails'; // 'emails' is name of new rule. |
@kartikkapatel solutions fails for nested attributes and there is no need to use "{$attribute}"
<?php
namespace App\Rules\Emails;
use Illuminate\Contracts\Validation\Rule;
use Illuminate\Support\Facades\Validator;
class CommaSeparatedEmails implements Rule
{
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
return Validator::make(
[
"attribute" => explode(',', $value)
],
[
"attribute.*" => 'required|email'
]
)->passes();
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'The :attribute must have valid email addresses.';
}
}
now this works
use App\Rules\Emails\CommaSeparatedEmails;
$request->validate([
'some.nested.field' => ['nullable', new CommaSeparatedEmails],
]);
Nice snippet. I found a spatie's package which does something similar https://github.com/spatie/laravel-validation-rules#delimited
"attribute" => explode(',', $value)
can be further transformed to
"attribute" => array_map('trim', explode(',', $value))
if you want comma and space separated emails (which is more natural for some users) to be valid too.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Perfect, just what I needed. Thx mate.