/**
* Get the inline message for a rule if it exists.
*
* @param string $attribute
* @param string $lowerRule
* @param array $source
* @return string|null
*/protectedfunctiongetInlineMessage($attribute, $lowerRule, $source = null)
{//Get the inline message for a rule if it exists$source = $source ?: $this->customMessages;// if has source ,just use it$keys = ["{$attribute}.{$lowerRule}", $lowerRule];// get key ,i like this type to write a new array.// First we will check for a custom message for an attribute specific rule// message for the fields, then we will check for a general custom line// that is not attribute specific. If we find either we'll return it.foreach ($keysas$key) {// loop keysforeach (array_keys($source) as$sourceKey) {// loop source keyif (Str::is($sourceKey, $key)) {// if it is a stringreturn$source[$sourceKey];// just return the source value, because it is right, and break it.
}
}
}// this is i know ,the un better function ,
}// the bigger strange method/**
* Get the custom error message from translator.
*
* @param string $customKey
* @return string
*/protectedfunctiongetCustomMessageFromTranslator($customKey)
{// get the custom error message from the translator$shortKey = str_replace('validation.custom.', '', $customKey);// use str replace to get the short key$customMessages = Arr::dot(
(array) $this->translator->trans('validation.custom')
);// get the custom Messagesforeach ($customMessagesas$key => $message) {// loop messageif ($key === $shortKey || (Str::contains($key, ['*']) && Str::is($key, $shortKey))) {
return$message;
}// or ,just return it
}
return$customKey;// return it
}
/**
* Get the proper error message for an attribute and size rule.
*
* @param string $attribute
* @param string $rule
* @return string
*/protectedfunctiongetSizeMessage($attribute, $rule)
{//Get the proper error message for an attribute and size rule.$lowerRule = Str::snake($rule);// get a format rule// There are three different types of size validations. The attribute may be// either a number, file, or string so we will check a few things to know// which type of value it is and return the correct line for that type.$type = $this->getAttributeType($attribute);//get Attribute Type$key = "validation.{$lowerRule}.{$type}";// combine a keyreturn$this->translator->trans($key);// return the translator key
}
/**
* Get the data type of the given attribute.
*
* @param string $attribute
* @return string
*/protectedfunctiongetAttributeType($attribute)
{// get the data type of the given attribute.// We assume that the attributes present in the file array are files so that// means that if the attribute does not have a numeric rule and the files// list doesn't have it we'll just consider it a string by elimination.if ($this->hasRule($attribute, $this->numericRules)) {
return'numeric';// return a type
} elseif ($this->hasRule($attribute, ['Array'])) {
return'array';// type is array
} elseif (array_key_exists($attribute, $this->files)) {
return'file';// type a file
}
return'string';// normal this is a string,//every thing can be make like a sting
}
/**
* Replace all error message place-holders with actual values.
*
* @param string $message
* @param string $attribute
* @param string $rule
* @param array $parameters
* @return string
*/protectedfunctiondoReplacements($message, $attribute, $rule, $parameters)
{//replace all error message place-holders with actual values.$value = $this->getAttribute($attribute);// value this get attribute$message = str_replace(// str_replace has a supper good type.
[':ATTRIBUTE', ':Attribute', ':attribute'],
[Str::upper($value), Str::ucfirst($value), $value],
$message
);
if (isset($this->replacers[Str::snake($rule)])) {// if isset this replacer$message = $this->callReplacer($message, $attribute, Str::snake($rule), $parameters);
} elseif (method_exists($this, $replacer = "replace{$rule}")) {
$message = $this->$replacer($message, $attribute, $rule, $parameters);
}
return$message;// return message
}
/**
* Transform an array of attributes to their displayable form.
*
* @param array $values
* @return array
*/protectedfunctiongetAttributeList(array $values)
{//Transform an array of attributes to their display able form.$attributes = [];// init this attributes// For each attribute in the list we will simply get its displayable form as// this is convenient when replacing lists of parameters like some of the// replacement functions do when formatting out the validation message.foreach ($valuesas$key => $value) {
$attributes[$key] = $this->getAttribute($value);
}
return$attributes;
}