*/
abstract class AbstractAction implements \ArrayAccess {
+ use \Civi\Schema\Traits\MagicGetterSetterTrait;
+
/**
* Api version number; cannot be changed.
*
*/
public function getParams() {
$params = [];
- foreach ($this->reflect()->getProperties(\ReflectionProperty::IS_PROTECTED) as $property) {
- $name = $property->getName();
- // Skip variables starting with an underscore
- if ($name[0] != '_') {
- $params[$name] = $this->$name;
- }
+ $magicProperties = $this->getMagicProperties();
+ foreach ($magicProperties as $name => $bool) {
+ $params[$name] = $this->$name;
}
return $params;
}
foreach ($this->reflect()->getProperties(\ReflectionProperty::IS_PROTECTED) as $property) {
$name = $property->getName();
if ($name != 'version' && $name[0] != '_') {
- $this->_paramInfo[$name] = ReflectionUtils::getCodeDocs($property, 'Property', $vars);
- $this->_paramInfo[$name]['default'] = $defaults[$name];
+ $docs = ReflectionUtils::getCodeDocs($property, 'Property', $vars);
+ $docs['default'] = $defaults[$name];
+ if (!empty($docs['optionsCallback'])) {
+ $docs['options'] = $this->{$docs['optionsCallback']}();
+ unset($docs['optionsCallback']);
+ }
+ $this->_paramInfo[$name] = $docs;
}
}
}
* @return bool
*/
public function paramExists($param) {
- return array_key_exists($param, $this->getParams());
+ return array_key_exists($param, $this->getMagicProperties());
}
/**
* @return array
*/
protected function getParamDefaults() {
- return array_intersect_key($this->reflect()->getDefaultProperties(), $this->getParams());
+ return array_intersect_key($this->reflect()->getDefaultProperties(), $this->getMagicProperties());
}
/**