page = $page; $this->layout = $layout; $this->controller = $controller; parent::__construct(); } /** * This event is triggered in the beginning of the execution cycle. * The layout's onStart method triggers before the page's onStart method. */ public function onStart() {} /** * This event is triggered in the end of the execution cycle, but before the page is displayed. * The layout's onEnd method triggers after the page's onEnd method. */ public function onEnd() {} /** * ArrayAccess implementation */ public function offsetSet($offset, $value) { $this->controller->vars[$offset] = $value; } /** * ArrayAccess implementation */ public function offsetExists($offset) { return isset($this->controller->vars[$offset]); } /** * ArrayAccess implementation */ public function offsetUnset($offset) { unset($this->controller->vars[$offset]); } /** * ArrayAccess implementation */ public function offsetGet($offset) { return isset($this->controller->vars[$offset]) ? $this->controller->vars[$offset] : null; } /** * Dynamically handle calls into the controller instance. * @param string $method * @param array $parameters * @return mixed */ public function __call($method, $parameters) { if (method_exists($this, $method)) return call_user_func_array([$this, $method], $parameters); return call_user_func_array([$this->controller, $method], $parameters); } /** * This object is referenced as $this->page in Cms\Classes\ComponentBase, * so to avoid $this->page->page this method will proxy there. * @param string $name * @return void */ public function __get($name) { return $this->page->{$name}; } /** * As per __get, this will set a variable instead. * @param string $name * @return void */ public function __set($name, $value) { return $this->page->{$name} = $value; } /** * As per __get, this will check if a variable isset instead. * @param string $name * @return void */ public function __isset($name) { return isset($this->page->{$name}); } }