summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--framework/Web/UI/TTemplateManager.php26
1 files changed, 25 insertions, 1 deletions
diff --git a/framework/Web/UI/TTemplateManager.php b/framework/Web/UI/TTemplateManager.php
index 0ffb6bec..7e1b9c84 100644
--- a/framework/Web/UI/TTemplateManager.php
+++ b/framework/Web/UI/TTemplateManager.php
@@ -938,7 +938,7 @@ class TTemplate extends TApplicationComponent implements ITemplate
else
{
// a simple property
- if (! ($class->hasMethod('set'.$name) || $class->hasMethod('setjs'.$name)) )
+ if (! ($class->hasMethod('set'.$name) || $class->hasMethod('setjs'.$name) || $this->isClassBehaviorMethod($class,$name)) )
{
if ($class->hasMethod('get'.$name) || $class->hasMethod('getjs'.$name))
throw new TConfigurationException('template_property_readonly',$type,$name);
@@ -1068,5 +1068,29 @@ class TTemplate extends TApplicationComponent implements ITemplate
return $input;
}
+
+ /**
+ * Checks if the given method belongs to a previously attached class behavior.
+ * @param ReflectionClass $class
+ * @param string $method
+ * @return boolean
+ */
+ protected function isClassBehaviorMethod(ReflectionClass $class,$method)
+ {
+ $component=new ReflectionClass('TComponent');
+ $behaviors=$component->getStaticProperties();
+ if(!isset($behaviors['_um']))
+ return false;
+ foreach($behaviors['_um'] as $name=>$list)
+ {
+ if(!$class->isSubclassOf($name)) continue;
+ foreach($list as $param)
+ {
+ if(method_exists($param->getBehavior(),'set'.$method))
+ return true;
+ }
+ }
+ return false;
+ }
}