[李景山php]每天laravel-20161014|Validator.php-14

来源:互联网 发布:nginx for linux 安装 编辑:程序博客网 时间:2024/06/01 08:44
    //2016-08-16    /**     * Parse a parameter list.     *     * @param  string  $rule     * @param  string  $parameter     * @return array     */    protected function parseParameters($rule, $parameter)    {//Parse a parameter list        if (strtolower($rule) == 'regex') {            return [$parameter];        }// if rule == regex ,just return it        return str_getcsv($parameter);// else return other type    }    /**     * Normalizes a rule so that we can accept short types.     *     * @param  string  $rule     * @return string     */    protected function normalizeRule($rule)    {        switch ($rule) {            case 'Int':                return 'Integer';// return like break            case 'Bool':                return 'Boolean';// return            default:                return $rule;//normal        }    }// use this method we can do some short rule    /**     * Determine if the given rule depends on other fields.     *     * @param  string  $rule     * @return bool     */    protected function dependsOnOtherFields($rule)    {        return in_array($rule, $this->dependentRules);    }// determine if the given rule depends on other fields.    /**     * Get the numeric keys from an attribute flattened with dot notation.     *     * E.g. 'foo.1.bar.2.baz' -> [1, 2]     *     * @param  string  $attribute     * @return array     */    protected function getNumericKeys($attribute)    {        if (preg_match_all('/\.(\d+)\./', $attribute, $keys)) {            return $keys[1];        }        return [];    }// from a special string to get the numeric array    /**     * Replace each field parameter which has asterisks with the given numeric keys.     *     * @param  array  $parameters     * @param  array  $keys     * @return array     */    protected function replaceAsterisksInParameters(array $parameters, array $keys)    {        return array_map(function ($field) use ($keys) {            return $this->replaceAsterisksWithKeys($field, $keys);        }, $parameters);    }//more change this parameter has asterisks    /**     * Replace asterisks with numeric keys.     *     * E.g. 'foo.*.bar.*.baz', [1, 2] -> foo.1.bar.2.baz     *     * @param  string  $field     * @param  array  $keys     * @return string     */    protected function replaceAsterisksWithKeys($field, array $keys)    {        return vsprintf(str_replace('*', '%d', $field), $keys);    }//replace asterisks with numeric keys    /**     * Get the array of custom validator extensions.     *     * @return array     */    public function getExtensions()    {        return $this->extensions;    }// Get the array of custom validator extensions.    /**     * Register an array of custom validator extensions.     *     * @param  array  $extensions     * @return void     */    public function addExtensions(array $extensions)    {        if ($extensions) {            $keys = array_map('\Illuminate\Support\Str::snake', array_keys($extensions));            $extensions = array_combine($keys, array_values($extensions));        }//extensions        // get array_combine        $this->extensions = array_merge($this->extensions, $extensions);    }//register an array of custom validator extensions.    /**     * Register an array of custom implicit validator extensions.     *     * @param  array  $extensions     * @return void     */    public function addImplicitExtensions(array $extensions)    {        $this->addExtensions($extensions);//add Extensions        foreach ($extensions as $rule => $extension) {// loop extensions            $this->implicitRules[] = Str::studly($rule);        }    }// register an array of custom implicit validator extensions    /**     * Register a custom validator extension.     *     * @param  string  $rule     * @param  \Closure|string  $extension     * @return void     */    public function addExtension($rule, $extension)    {        $this->extensions[Str::snake($rule)] = $extension;    }// register a custom validator extension    /**     * Register a custom implicit validator extension.     *     * @param  string   $rule     * @param  \Closure|string  $extension     * @return void     */    public function addImplicitExtension($rule, $extension)    {        $this->addExtension($rule, $extension);        $this->implicitRules[] = Str::studly($rule);    }// register a custom implicit validator extension    /**     * Get the array of custom validator message replacers.     *     * @return array     */    public function getReplacers()    {        return $this->replacers;    }// get the repalce    /**     * Register an array of custom validator message replacers.     *     * @param  array  $replacers     * @return void     */    public function addReplacers(array $replacers)    {        if ($replacers) {            $keys = array_map('\Illuminate\Support\Str::snake', array_keys($replacers));            $replacers = array_combine($keys, array_values($replacers));        }// repalce        $this->replacers = array_merge($this->replacers, $replacers);    }//add Replacers    /**     * Register a custom validator message replacer.     *     * @param  string  $rule     * @param  \Closure|string  $replacer     * @return void     */    public function addReplacer($rule, $replacer)    {        $this->replacers[Str::snake($rule)] = $replacer;    }// add Replace    /**     * Get the data under validation.     *     * @return array     */    public function getData()    {        return $this->data;    }// get Data    /**     * Set the data under validation.     *     * @param  array  $data     * @return void     */    public function setData(array $data)    {        $this->data = $this->parseData($data);    }// set Data    /**     * Get the validation rules.     *     * @return array     */    public function getRules()    {        return $this->rules;    }//get Rules    /**     * Set the validation rules.     *     * @param  array  $rules     * @return $this     */    public function setRules(array $rules)    {        $this->rules = $this->explodeRules($rules);        return $this;    }//set Rules    /**     * Set the custom attributes on the validator.     *     * @param  array  $attributes     * @return $this     */    public function setAttributeNames(array $attributes)    {        $this->customAttributes = $attributes;        return $this;    }    /**     * Set the custom values on the validator.     *     * @param  array  $values     * @return $this     */    public function setValueNames(array $values)    {        $this->customValues = $values;        return $this;    }    /**     * Get the files under validation.     *     * @return array     */    public function getFiles()    {        return $this->files;    }    /**     * Set the files under validation.     *     * @param  array  $files     * @return $this     */    public function setFiles(array $files)    {        $this->files = $files;        return $this;    }    /**     * Get the Presence Verifier implementation.     *     * @return \Illuminate\Validation\PresenceVerifierInterface     *     * @throws \RuntimeException     */    public function getPresenceVerifier()    {        if (! isset($this->presenceVerifier)) {            throw new RuntimeException('Presence verifier has not been set.');        }        return $this->presenceVerifier;    }    /**     * Set the Presence Verifier implementation.     *     * @param  \Illuminate\Validation\PresenceVerifierInterface  $presenceVerifier     * @return void     */    public function setPresenceVerifier(PresenceVerifierInterface $presenceVerifier)    {        $this->presenceVerifier = $presenceVerifier;    }    /**     * Get the Translator implementation.     *     * @return \Symfony\Component\Translation\TranslatorInterface     */    public function getTranslator()    {        return $this->translator;    }    /**     * Set the Translator implementation.     *     * @param  \Symfony\Component\Translation\TranslatorInterface  $translator     * @return void     */    public function setTranslator(TranslatorInterface $translator)    {        $this->translator = $translator;    }    /**     * Get the custom messages for the validator.     *     * @return array     */    public function getCustomMessages()    {        return $this->customMessages;    }    /**     * Set the custom messages for the validator.     *     * @param  array  $messages     * @return void     */    public function setCustomMessages(array $messages)    {        $this->customMessages = array_merge($this->customMessages, $messages);    }    /**     * Get the custom attributes used by the validator.     *     * @return array     */    public function getCustomAttributes()    {        return $this->customAttributes;    }    /**     * Add custom attributes to the validator.     *     * @param  array  $customAttributes     * @return $this     */    public function addCustomAttributes(array $customAttributes)    {        $this->customAttributes = array_merge($this->customAttributes, $customAttributes);        return $this;    }//add    /**     * Get the custom values for the validator.     *     * @return array     */    public function getCustomValues()    {        return $this->customValues;    }//get    /**     * Add the custom values for the validator.     *     * @param  array  $customValues     * @return $this     */    public function addCustomValues(array $customValues)    {        $this->customValues = array_merge($this->customValues, $customValues);        return $this;    }//add    /**     * Get the fallback messages for the validator.     *     * @return array     */    public function getFallbackMessages()    {        return $this->fallbackMessages;    }    /**     * Set the fallback messages for the validator.     *     * @param  array  $messages     * @return void     */    public function setFallbackMessages(array $messages)    {        $this->fallbackMessages = $messages;    }    /**     * Get the failed validation rules.     *     * @return array     */    public function failed()    {        return $this->failedRules;    }    /**     * Get the message container for the validator.     *     * @return \Illuminate\Support\MessageBag     */    public function messages()    {        if (! $this->messages) {            $this->passes();        }        return $this->messages;    }    /**     * An alternative more semantic shortcut to the message container.     *     * @return \Illuminate\Support\MessageBag     */    public function errors()    {        return $this->messages();    }//get    /**     * Get the messages for the instance.     *     * @return \Illuminate\Support\MessageBag     */    public function getMessageBag()    {        return $this->messages();    }    /**     * Set the IoC container instance.     *     * @param  \Illuminate\Contracts\Container\Container  $container     * @return void     */    public function setContainer(Container $container)    {        $this->container = $container;    }//add    /**     * Call a custom validator extension.     *     * @param  string  $rule     * @param  array   $parameters     * @return bool|null     */    protected function callExtension($rule, $parameters)    {        $callback = $this->extensions[$rule];        if ($callback instanceof Closure) {            return call_user_func_array($callback, $parameters);        } elseif (is_string($callback)) {            return $this->callClassBasedExtension($callback, $parameters);        }    }// call function    /**     * Call a class based validator extension.     *     * @param  string  $callback     * @param  array   $parameters     * @return bool     */    protected function callClassBasedExtension($callback, $parameters)    {        list($class, $method) = explode('@', $callback);        return call_user_func_array([$this->container->make($class), $method], $parameters);    }//call user func array    /**     * Call a custom validator message replacer.     *     * @param  string  $message     * @param  string  $attribute     * @param  string  $rule     * @param  array   $parameters     * @return string|null     */    protected function callReplacer($message, $attribute, $rule, $parameters)    {        $callback = $this->replacers[$rule];        if ($callback instanceof Closure) {            return call_user_func_array($callback, func_get_args());        } elseif (is_string($callback)) {            return $this->callClassBasedReplacer($callback, $message, $attribute, $rule, $parameters);        }    }//call replace    /**     * Call a class based validator message replacer.     *     * @param  string  $callback     * @param  string  $message     * @param  string  $attribute     * @param  string  $rule     * @param  array   $parameters     * @return string     */    protected function callClassBasedReplacer($callback, $message, $attribute, $rule, $parameters)    {        list($class, $method) = explode('@', $callback);        return call_user_func_array([$this->container->make($class), $method], array_slice(func_get_args(), 1));    }//call class    /**     * Require a certain number of parameters to be present.     *     * @param  int    $count     * @param  array  $parameters     * @param  string  $rule     * @return void     *     * @throws \InvalidArgumentException     */    protected function requireParameterCount($count, $parameters, $rule)    {        if (count($parameters) < $count) {            throw new InvalidArgumentException("Validation rule $rule requires at least $count parameters.");        }    }// require a certain    /**     * Handle dynamic calls to class methods.     *     * @param  string  $method     * @param  array   $parameters     * @return mixed     *     * @throws \BadMethodCallException     */    public function __call($method, $parameters)    {        $rule = Str::snake(substr($method, 8));        if (isset($this->extensions[$rule])) {            return $this->callExtension($rule, $parameters);        }        throw new BadMethodCallException("Method [$method] does not exist.");    }// a __call}
0 0