protected function validateField(&$value, array $field, Validation $validation) {
        $path = array_select(['path', 'name'], $field);
        $type = val('type', $field, '');
        $valid = true;

        // Check required first.
        // A value that isn't passed should fail the required test, but short circuit the other ones.
        $validRequired = $this->validateRequired($value, $field, $validation);
        if ($validRequired !== null) {
            return $validRequired;
        }

        // Validate the field's type.
        $validType = true;
        switch ($type) {
            case 'boolean':
                $validType &= $this->validateBoolean($value, $field, $validation);
                break;
            case 'integer':
                $validType &= $this->validateInteger($value, $field, $validation);
                break;
            case 'float':
                $validType &= $this->validateFloat($value, $field, $validation);
                break;
            case 'string':
                $validType &= $this->validateString($value, $field, $validation);
                break;
            case 'timestamp':
                $validType &= $this->validateTimestamp($value, $field, $validation);
                break;
            case 'datetime':
                $validType &= $this->validateDatetime($value, $field, $validation);
                break;
            case 'base64':
                $validType &= $this->validateBase64($value, $field, $validation);
                break;
            case 'array':
                $validType &= $this->validateArray($value, $field, $validation);
                break;
            case 'object':
                $validType &= $this->validateObject($value, $field, $validation);
                break;
            case '':
                // No type was specified so we are valid.
                $validType = true;
                break;
            default:
                throw new \InvalidArgumentException("Unrecognized type $type.", 500);
        }
        if (!$validType) {
            $valid = false;
            $validation->addError(
                'invalid_type',
                $path,
                [
                    'type' => $type,
                    'message' => sprintft('%1$s is not a valid %2$s.', $path, $type),
                    'status' => 422
                ]
            );
        }

        // Validate a custom field validator.
        $validatorName = val('validatorName', $field, $path);
        if (isset($this->validators[$validatorName])) {
            foreach ($this->validators[$validatorName] as $callback) {
                call_user_func_array($callback, [&$value, $field, $validation]);
            }
        }

        return $valid;
    }
protected function validateField(&$value, array $field, Validation $validation) {
        $path = array_select(['path', 'name'], $field);
        $type = val('type', $field, '');
        $valid = true;

        // Check required first.
        // A value that isn't passed should fail the required test, but short circuit the other ones.
        $validRequired = $this->validateRequired($value, $field, $validation);
        if ($validRequired !== null) {
            return $validRequired;
        }

        // Validate the field's type.
        $validType = true;
        switch ($type) {
            case 'boolean':
                $validType &= $this->validateBoolean($value, $field, $validation);
                break;
            case 'integer':
                $validType &= $this->validateInteger($value, $field, $validation);
                break;
            case 'float':
                $validType &= $this->validateFloat($value, $field, $validation);
                break;
            case 'string':
                $validType &= $this->validateString($value, $field, $validation);
                break;
            case 'timestamp':
                $validType &= $this->validateTimestamp($value, $field, $validation);
                break;
            case 'datetime':
                $validType &= $this->validateDatetime($value, $field, $validation);
                break;
            case 'base64':
                $validType &= $this->validateBase64($value, $field, $validation);
                break;
            case 'array':
                $validType &= $this->validateArray($value, $field, $validation);
                break;
            case 'object':
                $validType &= $this->validateObject($value, $field, $validation);
                break;
            case '':
                // No type was specified so we are valid.
                $validType = true;
                break;
            default:
                throw new \InvalidArgumentException("Unrecognized type $type.", 500);
        }
        if (!$validType) {
            $valid = false;
            $validation->addError(
                'invalid_type',
                $path,
                [
                    'type' => $type,
                    'message' => sprintft('%1$s is not a valid %2$s.', $path, $type),
                    'status' => 422
                ]
            );
        }

        // Validate a custom field validator.
        $validatorName = val('validatorName', $field, $path);
        if (isset($this->validators[$validatorName])) {
            foreach ($this->validators[$validatorName] as $callback) {
                call_user_func_array($callback, [&$value, $field, $validation]);
            }
        }

        return $valid;
    }
protected function validateField ( & $ value , array $ field , Validation $ validation ) { $ path = array_select ( [ 'path' , 'name' ] , $ field ) ; $ type = val ( 'type' , $ field , '' ) ; $ valid = true ; // Check required first. // A value that isn't passed should fail the required test, but short circuit the other ones. $ validRequired = $ this -> validateRequired ( $ value , $ field , $ validation ) ; if ( $ validRequired !== null ) { return $ validRequired ; } // Validate the field's type. $ validType = true ; switch ( $ type ) { case 'boolean' : $ validType &= $ this -> validateBoolean ( $ value , $ field , $ validation ) ; break ; case 'integer' : $ validType &= $ this -> validateInteger ( $ value , $ field , $ validation ) ; break ; case 'float' : $ validType &= $ this -> validateFloat ( $ value , $ field , $ validation ) ; break ; case 'string' : $ validType &= $ this -> validateString ( $ value , $ field , $ validation ) ; break ; case 'timestamp' : $ validType &= $ this -> validateTimestamp ( $ value , $ field , $ validation ) ; break ; case 'datetime' : $ validType &= $ this -> validateDatetime ( $ value , $ field , $ validation ) ; break ; case 'base64' : $ validType &= $ this -> validateBase64 ( $ value , $ field , $ validation ) ; break ; case 'array' : $ validType &= $ this -> validateArray ( $ value , $ field , $ validation ) ; break ; case 'object' : $ validType &= $ this -> validateObject ( $ value , $ field , $ validation ) ; break ; case '' : // No type was specified so we are valid. $ validType = true ; break ; default : throw new \ InvalidArgumentException ( "Unrecognized type $type." , 500 ) ; } if ( ! $ validType ) { $ valid = false ; $ validation -> addError ( 'invalid_type' , $ path , [ 'type' => $ type , 'message' => sprintft ( '%1$s is not a valid %2$s.' , $ path , $ type ) , 'status' => 422 ] ) ; } // Validate a custom field validator. $ validatorName = val ( 'validatorName' , $ field , $ path ) ; if ( isset ( $ this -> validators [ $ validatorName ] ) ) { foreach ( $ this -> validators [ $ validatorName ] as $ callback ) { call_user_func_array ( $ callback , [ & $ value , $ field , $ validation ] ) ; } } return $ valid ; }
Validate a field.

@param mixed &$value The value to validate.
@param array $field Parameters on the field.
@param Validation $validation A validation object to add errors to.
@throws \InvalidArgumentException Throws an exception when there is something wrong in the {@link $params}.
@internal param string $fieldname The name of the field to validate.
@return bool Returns true if the field is valid, false otherwise.
Validate a field .