/** * Validate a given attribute against a rule. * * @param string $attribute * @param string $rule * @return void */ protected function validate($attribute, $rule) {// validate a given attribute against a rule. list($rule, $parameters) = $this->parseRule($rule);//list function to get the if ($rule == ‘‘) { return; }// if no rule // First we will get the numeric keys for the given attribute in case the field is nested in // an array. Then we determine if the given rule accepts other field names as parameters. // If so, we will replace any asterisks found in the parameters with the numeric keys. if (($keys = $this->getNumericKeys($attribute)) && $this->dependsOnOtherFields($rule)) {//get number and depends $parameters = $this->replaceAsterisksInParameters($parameters, $keys); }// a normal logic function // We will get the value for the given attribute from the array of data and then // verify that the attribute is indeed validatable. Unless the rule implies // that the attribute is required, rules are not run for missing values. $value = $this->getValue($attribute); // We will get the value for the given attribute from the array of data and then // verify that the attribute is indeed vaidatable.Unless the rule implies // that the attribute is required,rules are not run for missing values. $validatable = $this->isValidatable($rule, $attribute, $value); // determine validatable $method = "validate{$rule}";// get method way if ($validatable && ! $this->$method($attribute, $value, $parameters, $this)) { $this->addFailure($attribute, $rule, $parameters); }// determine all } /** * Returns the data which was valid. * * @return array */ public function valid() { if (! $this->messages) { $this->passes(); } return array_diff_key($this->data, $this->messages()->toArray()); }// change it is a real valid data /** * Returns the data which was invalid. * * @return array */ public function invalid() { if (! $this->messages) { $this->passes(); }//if do not has messages get passes return array_intersect_key($this->data, $this->messages()->toArray());// return array_intersect_key }// a invalid method /** * Get the value of a given attribute. * * @param string $attribute * @return mixed */ protected function getValue($attribute) { if (! is_null($value = Arr::get($this->data, $attribute))) {// type1 return $value;// return value } elseif (! is_null($value = Arr::get($this->files, $attribute))) {//type2 return $value;// return value } }//Get the value of a given attribute /** * Determine if the attribute is validatable. * * @param string $rule * @param string $attribute * @param mixed $value * @return bool */ protected function isValidatable($rule, $attribute, $value) { return $this->presentOrRuleIsImplicit($rule, $attribute, $value) && $this->passesOptionalCheck($attribute) && $this->hasNotFailedPreviousRuleIfPresenceRule($rule, $attribute); //three type determine this value. }//determine if the attribute is validatable. /** * Determine if the field is present, or the rule implies required. * * @param string $rule * @param string $attribute * @param mixed $value * @return bool */ protected function presentOrRuleIsImplicit($rule, $attribute, $value) { return $this->validateRequired($attribute, $value) || $this->isImplicit($rule); // this validateRequired }//Determine if the field is present, or the rule implies required. /** * Determine if the attribute passes any optional check. * * @param string $attribute * @return bool */ protected function passesOptionalCheck($attribute) { if ($this->hasRule($attribute, [‘Sometimes‘])) { return array_key_exists($attribute, Arr::dot($this->data)) || in_array($attribute, array_keys($this->data)) || array_key_exists($attribute, $this->files); }// this->hasRule($attribute) return true; }// passes Optional Check /** * Determine if a given rule implies the attribute is required. * * @param string $rule * @return bool */ protected function isImplicit($rule) { return in_array($rule, $this->implicitRules); }// check it is a implicit // in_array // sorry today,we need to make a very important PPT, so done.
时间: 2024-10-25 07:58:14