Prado\Web\UI\TTemplate::validateAttributes PHP Метод

validateAttributes() защищенный Метод

protected validateAttributes ( $type, $attributes )
    protected function validateAttributes($type, $attributes)
    {
        Prado::using($type);
        if (($pos = strrpos($type, '.')) !== false) {
            $className = substr($type, $pos + 1);
        } else {
            $className = $type;
        }
        $class = new \ReflectionClass($className);
        if (is_subclass_of($className, '\\Prado\\Web\\UI\\TControl') || $className === '\\Prado\\Web\\UI\\TControl') {
            foreach ($attributes as $name => $att) {
                if (($pos = strpos($name, '.')) !== false) {
                    // a subproperty, so the first segment must be readable
                    $subname = substr($name, 0, $pos);
                    if (!$class->hasMethod('get' . $subname)) {
                        throw new TConfigurationException('template_property_unknown', $type, $subname);
                    }
                } else {
                    if (strncasecmp($name, 'on', 2) === 0) {
                        // an event
                        if (!$class->hasMethod($name)) {
                            throw new TConfigurationException('template_event_unknown', $type, $name);
                        } else {
                            if (!is_string($att)) {
                                throw new TConfigurationException('template_eventhandler_invalid', $type, $name);
                            }
                        }
                    } else {
                        // a simple property
                        if (!($class->hasMethod('set' . $name) || $class->hasMethod('setjs' . $name) || $this->isClassBehaviorMethod($class, 'set' . $name))) {
                            if ($class->hasMethod('get' . $name) || $class->hasMethod('getjs' . $name)) {
                                throw new TConfigurationException('template_property_readonly', $type, $name);
                            } else {
                                throw new TConfigurationException('template_property_unknown', $type, $name);
                            }
                        } else {
                            if (is_array($att) && $att[0] !== self::CONFIG_EXPRESSION) {
                                if (strcasecmp($name, 'id') === 0) {
                                    throw new TConfigurationException('template_controlid_invalid', $type);
                                } else {
                                    if (strcasecmp($name, 'skinid') === 0) {
                                        throw new TConfigurationException('template_controlskinid_invalid', $type);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        } else {
            if (is_subclass_of($className, '\\Prado\\TComponent') || $className === '\\Prado\\TComponent') {
                foreach ($attributes as $name => $att) {
                    if (is_array($att) && $att[0] === self::CONFIG_DATABIND) {
                        throw new TConfigurationException('template_databind_forbidden', $type, $name);
                    }
                    if (($pos = strpos($name, '.')) !== false) {
                        // a subproperty, so the first segment must be readable
                        $subname = substr($name, 0, $pos);
                        if (!$class->hasMethod('get' . $subname)) {
                            throw new TConfigurationException('template_property_unknown', $type, $subname);
                        }
                    } else {
                        if (strncasecmp($name, 'on', 2) === 0) {
                            throw new TConfigurationException('template_event_forbidden', $type, $name);
                        } else {
                            // id is still alowed for TComponent, even if id property doesn't exist
                            if (strcasecmp($name, 'id') !== 0 && !($class->hasMethod('set' . $name) || $this->isClassBehaviorMethod($class, 'set' . $name))) {
                                if ($class->hasMethod('get' . $name)) {
                                    throw new TConfigurationException('template_property_readonly', $type, $name);
                                } else {
                                    throw new TConfigurationException('template_property_unknown', $type, $name);
                                }
                            }
                        }
                    }
                }
            } else {
                throw new TConfigurationException('template_component_required', $type);
            }
        }
    }