We were unable to load Disqus. If you are a moderator please see our troubleshooting guide.

Denitsa Mlechkova • 6 years ago

I made some adjustments to allow passing in `messages` from the traits as well:


public function withValidator(Validator $validator)
{
if ($rulesAndMessages = $this->getTraitRulesAndMessages()) {
$validator->addRules($rulesAndMessages['rules']);
$validator->customMessages = array_merge($validator->customMessages, $rulesAndMessages['messages']);
}
}

protected function getTraitRulesAndMessages()
{
return array_reduce(class_uses(static::class), function ($rulesAndMessages, $trait) {
preg_match('/^Has([A-Za-z]+)Fields$/', class_basename($trait), $matchTraitConvention);

if ($traitSubject = isset($matchTraitConvention[1]) ? $matchTraitConvention[1] : null) {
$rulesAndMessages['rules'] = array_merge($rulesAndMessages['rules'], $this->getTraitRules($traitSubject));
$rulesAndMessages['messages'] = array_merge($rulesAndMessages['messages'], $this->getTraitMessages($traitSubject));
}

return $rulesAndMessages;
}, array_fill_keys(['messages', 'rules'], []));
}

protected function getTraitRules($traitSubject)
{
$methodName = camel_case($traitSubject) . 'Rules';

return method_exists($this, $methodName) ? $this->{$methodName}() : [];
}

protected function getTraitMessages($traitSubject)
{
$methodName = camel_case($traitSubject) . 'Messages';

return method_exists($this, $methodName) ? $this->{$methodName}() : [];
}

Denitsa Mlechkova • 6 years ago

Sorry for the bad formatting...

Denitsa Mlechkova • 6 years ago

Cool, I just replaced my merging with your method! Thanks for sharing this :)