Validation of array form fields in laravel 4 error

前端 未结 5 1064
悲哀的现实
悲哀的现实 2020-11-29 03:56

How can we validate form fields that are arrays? Take a look at the following code

UserPhone Model:

 public         


        
5条回答
  •  囚心锁ツ
    2020-11-29 04:44

    Here's an update to the code of Ronald, because my custom rules wouldn't work with the array extension. Tested with Laravel 4.1, default rules, extended rules, …

    public function __call($method, $parameters) {
        $isArrayRule = FALSE;
        if(substr($method, -5) === 'Array') {
            $method = substr($method, 0, -5);
            $isArrayRule = TRUE;
        }
    
        //
        $rule = snake_case(substr($method, 8));
    
        // Default or custom rule
        if(!$isArrayRule) {
            // And we have a default value (not an array)
            if(!is_array($parameters[1])) {
                // Try getting the custom validation rule
                if(isset($this->extensions[$rule])) {
                    return $this->callExtension($rule, $parameters);
                }
    
                // None found
                throw new \BadMethodCallException("Method [$method] does not exist.");
            } // Array given for default rule; cannot be!
            else return FALSE;
        }
    
        // Array rules
        $success = TRUE;
        foreach($parameters[1] as $value) {
            $parameters[1] = $value;
    
            // Default rule exists, use it
            if(is_callable("parent::$method")) {
                $success &= call_user_func_array(array($this, $method), $parameters);
            } else {
                // Try a custom rule
                if(isset($this->extensions[$rule])) {
                    $success &= $this->callExtension($rule, $parameters);
                }
    
                // No custom rule found
                throw new \BadMethodCallException("Method [$method] does not exist.");
            }
        }
    
        // Did any of them (array rules) fail?
        return $success;
    }
    

提交回复
热议问题