'viewBag', 'description' => 'Stores custom template properties.' ]; } /** * @param array $properties * @return array */ public function validateProperties(array $properties) { return $properties; } /** * Implements the getter functionality. * @param string $name * @return void */ public function __get($name) { if (array_key_exists($name, $this->properties)) { return $this->properties[$name]; } return null; } /** * Determine if an attribute exists on the object. * @param string $key * @return void */ public function __isset($key) { if (array_key_exists($key, $this->properties)) { return true; } return false; } /** * @return array */ public function defineProperties() { $result = []; foreach ($this->properties as $name => $value) { $result[$name] = [ 'title' => $name, 'type' => 'string' ]; } return $result; } }