protected function configureProperty($component, $name, $value)
{
if (is_array($value)) {
switch ($value[0]) {
case self::CONFIG_DATABIND:
$component->bindProperty($name, $value[1]);
break;
case self::CONFIG_EXPRESSION:
if ($component instanceof TControl) {
$component->autoBindProperty($name, $value[1]);
} else {
$setter = 'set' . $name;
$component->{$setter}($this->_tplControl->evaluateExpression($value[1]));
}
break;
case self::CONFIG_TEMPLATE:
$setter = 'set' . $name;
$component->{$setter}($value[1]);
break;
case self::CONFIG_ASSET:
// asset URL
$setter = 'set' . $name;
$url = $this->publishFilePath($this->_contextPath . DIRECTORY_SEPARATOR . $value[1]);
$component->{$setter}($url);
break;
case self::CONFIG_PARAMETER:
// application parameter
$setter = 'set' . $name;
$component->{$setter}($this->getApplication()->getParameters()->itemAt($value[1]));
break;
case self::CONFIG_LOCALIZATION:
$setter = 'set' . $name;
$component->{$setter}(Prado::localize($value[1]));
break;
default:
// an error if reaching here
throw new TConfigurationException('template_tag_unexpected', $name, $value[1]);
break;
}
} else {
if (substr($name, 0, 2) == 'js') {
if ($value and !$value instanceof TJavaScriptLiteral) {
$value = new TJavaScriptLiteral($value);
}
}
$setter = 'set' . $name;
$component->{$setter}($value);
}
}