Skip to content

Commit 4ddd68e

Browse files
authored
[11.x] Improve Email validation rule custom translation messages (#54202)
* Test validation messages * Simplify Email rule and make tests pass * Styleci
1 parent 7594f44 commit 4ddd68e

File tree

2 files changed

+124
-90
lines changed

2 files changed

+124
-90
lines changed

src/Illuminate/Validation/Rules/Email.php

+18-52
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,13 @@
22

33
namespace Illuminate\Validation\Rules;
44

5-
use Egulias\EmailValidator\EmailValidator;
6-
use Egulias\EmailValidator\Validation\DNSCheckValidation;
7-
use Egulias\EmailValidator\Validation\Extra\SpoofCheckValidation;
8-
use Egulias\EmailValidator\Validation\MultipleValidationWithAnd;
9-
use Egulias\EmailValidator\Validation\NoRFCWarningsValidation;
10-
use Egulias\EmailValidator\Validation\RFCValidation;
11-
use Illuminate\Container\Container;
125
use Illuminate\Contracts\Validation\DataAwareRule;
136
use Illuminate\Contracts\Validation\Rule;
147
use Illuminate\Contracts\Validation\ValidatorAwareRule;
158
use Illuminate\Support\Arr;
16-
use Illuminate\Support\Collection;
179
use Illuminate\Support\Facades\Validator;
1810
use Illuminate\Support\Traits\Conditionable;
1911
use Illuminate\Support\Traits\Macroable;
20-
use Illuminate\Validation\Concerns\FilterEmailValidation;
2112
use InvalidArgumentException;
2213

2314
class Email implements Rule, DataAwareRule, ValidatorAwareRule
@@ -199,29 +190,19 @@ public function passes($attribute, $value)
199190
return false;
200191
}
201192

202-
$emailValidator = Container::getInstance()->make(EmailValidator::class);
193+
$validator = Validator::make(
194+
$this->data,
195+
[$attribute => $this->buildValidationRules()],
196+
$this->validator->customMessages,
197+
$this->validator->customAttributes
198+
);
203199

204-
$passes = $emailValidator->isValid((string) $value, new MultipleValidationWithAnd($this->buildValidationRules()));
205-
206-
if (! $passes) {
207-
$this->messages = [trans('validation.email', ['attribute' => $attribute])];
200+
if ($validator->fails()) {
201+
$this->messages = array_merge($this->messages, $validator->messages()->all());
208202

209203
return false;
210204
}
211205

212-
if ($this->customRules) {
213-
$validator = Validator::make(
214-
$this->data,
215-
[$attribute => $this->customRules],
216-
$this->validator->customMessages,
217-
$this->validator->customAttributes
218-
);
219-
220-
if ($validator->fails()) {
221-
return $this->fail($validator->messages()->all());
222-
}
223-
}
224-
225206
return true;
226207
}
227208

@@ -235,51 +216,36 @@ protected function buildValidationRules()
235216
$rules = [];
236217

237218
if ($this->rfcCompliant) {
238-
$rules[] = new RFCValidation;
219+
$rules[] = 'rfc';
239220
}
240221

241222
if ($this->strictRfcCompliant) {
242-
$rules[] = new NoRFCWarningsValidation;
223+
$rules[] = 'strict';
243224
}
244225

245226
if ($this->validateMxRecord) {
246-
$rules[] = new DNSCheckValidation;
227+
$rules[] = 'dns';
247228
}
248229

249230
if ($this->preventSpoofing) {
250-
$rules[] = new SpoofCheckValidation;
231+
$rules[] = 'spoof';
251232
}
252233

253234
if ($this->nativeValidation) {
254-
$rules[] = new FilterEmailValidation;
235+
$rules[] = 'filter';
255236
}
256237

257238
if ($this->nativeValidationWithUnicodeAllowed) {
258-
$rules[] = FilterEmailValidation::unicode();
239+
$rules[] = 'filter_unicode';
259240
}
260241

261242
if ($rules) {
262-
return $rules;
243+
$rules = ['email:'.implode(',', $rules)];
244+
} else {
245+
$rules = ['email'];
263246
}
264247

265-
return [new RFCValidation];
266-
}
267-
268-
/**
269-
* Adds the given failures, and return false.
270-
*
271-
* @param array|string $messages
272-
* @return bool
273-
*/
274-
protected function fail($messages)
275-
{
276-
$messages = Collection::wrap($messages)
277-
->map(fn ($message) => $this->validator->getTranslator()->get($message))
278-
->all();
279-
280-
$this->messages = array_merge($this->messages, $messages);
281-
282-
return false;
248+
return array_merge(array_filter($rules), $this->customRules);
283249
}
284250

285251
/**

0 commit comments

Comments
 (0)