* @link http://netmonsters.ru * @package Majestic * @subpackage View * @since 2010-02-25 * @version SVN: $Id$ * @filesource $URL$ */ /** * @method ViewHelperGet get() */ class PHPView implements iView { protected $path = ''; protected $variables = array(); protected $helpers = array(); protected $extension = '.phtml'; protected $template = ''; public function __construct($config) { if (!isset($config['path'])) { throw new InitializationException('Configuration must have a "path" set.'); } $this->setPath($config['path']); } public function getPath() { return $this->path; } public function setPath($path) { $this->path = $path; } /** * @param Action $object */ public function assignObject($object) { foreach (get_object_vars($object) as $name => $value) { $this->assign($name, $value); } } /** * @param string $name * @param mixed $value */ public function assign($name, $value = null) { $this->variables[$name] = $value; } /** * @param string $name * @param mixed $value */ public function prepend($name, $value) { if (isset($this->variables[$name])) { $this->variables[$name] = $value . $this->variables[$name]; } else { $this->variables[$name] = $value; } } /** * @param string $name * @param mixed $value */ public function append($name, $value) { if (isset($this->variables[$name])) { $this->variables[$name] .= $value; } else { $this->variables[$name] = $value; } } public function fetch($template) { $this->template = $this->getTemplatePath($template); unset($template); extract($this->variables); ob_start(); if (!is_readable($this->template)) { ob_clean(); throw new GeneralException('Template "' . $this->template .'" not found.'); } include($this->template); return ob_get_clean(); } public function escape($var) { return htmlentities($var, ENT_QUOTES, 'UTF-8'); } /** * Helpers call * * @param mixed $name * @param mixed $args * @return ViewHelper */ public function __call($name, $args) { $helper = $this->getHelper($name); return call_user_func_array(array($helper, $name), $args); } protected function getHelper($name) { if (!isset($this->helpers[$name])) { $class = ucfirst($name) . 'ViewHelper'; if (!class_exists($class)) { throw new GeneralException('View helper "' . $class . '" not found.'); } $this->helpers[$name] = new $class($this); } return $this->helpers[$name]; } protected function getTemplatePath($template) { return $this->path . $template . $this->extension; } }