From f6d78dddad7537fec04efadd165d2a9d5f59f352 Mon Sep 17 00:00:00 2001 From: Lorenzo Pisani Date: Wed, 14 Jul 2010 10:41:08 -0700 Subject: [PATCH 1/2] throwing an exception in the factory method when $path is not to a valid View class, this allows you to handle missing view classes --- classes/kostache.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/classes/kostache.php b/classes/kostache.php index 39f322c..a51cd74 100644 --- a/classes/kostache.php +++ b/classes/kostache.php @@ -18,6 +18,10 @@ class Kostache extends Mustache public static function factory($path, $template = null, $view = null, $partials = null) { $class = 'View_'.str_replace('/', '_', $path); + + if ( ! class_exists($class)) + throw new Kohana_View_Exception('Missing Kostache View Class for ":class"', array(':class' => $class)); + return new $class($template, $view, $partials); } From 3fce0e49a30ac0704ceff579a81ef913422b0ff3 Mon Sep 17 00:00:00 2001 From: Lorenzo Pisani Date: Wed, 14 Jul 2010 16:13:55 -0700 Subject: [PATCH 2/2] adding the empty kostache class (I am extending this quite often in projects) --- classes/kohana/kostache.php | 126 ++++++++++++++++++++++++++++++++++++ classes/kostache.php | 125 +---------------------------------- 2 files changed, 127 insertions(+), 124 deletions(-) create mode 100644 classes/kohana/kostache.php diff --git a/classes/kohana/kostache.php b/classes/kohana/kostache.php new file mode 100644 index 0000000..0caf5e4 --- /dev/null +++ b/classes/kohana/kostache.php @@ -0,0 +1,126 @@ + $class)); + + return new $class($template, $view, $partials); + } + + /** + * KOstache class constructor. + * + * This method accepts a $template string and a $view object. Optionally, pass an associative + * array of partials as well. + * + * @access public + * @param string $template (default: null) + * @param mixed $view (default: null) + * @param array $partials (default: null) + * @return void + */ + public function __construct($template = null, $view = null, $partials = null) + { + parent::__construct($template, $view, $partials); + + $this->_charset = Kohana::$charset; + + // Override the template location to match kohana's conventions + if ( ! $this->_template) + { + $foo = explode('_', get_class($this)); + array_shift($foo); + $view_location = strtolower(implode('/', $foo)); + } + else + { + $view_location = $this->_template; + } + + $template = Kohana::find_file('templates', $view_location, 'mustache'); + + if ($template) + $this->_template = file_get_contents($template); + else + throw new Kohana_Exception('Template file not found: templates/'.$view_location); + + // Convert partials to expanded template strings + foreach ($this->_partials as $key => $partial_template) + { + if ($location = Kohana::find_file('templates', $partial_template, 'mustache')) + { + $this->_partials[$key] = file_get_contents($location); + } + } + } + + /** + * Assigns a variable by name. + * + * // This value can be accessed as {{foo}} within the template + * $view->set('foo', 'my value'); + * + * You can also use an array to set several values at once: + * + * // Create the values {{food}} and {{beverage}} in the template + * $view->set(array('food' => 'bread', 'beverage' => 'water')); + * + * @param string variable name or an array of variables + * @param mixed value + * @return $this + */ + public function set($key, $value = NULL) + { + if (is_array($key)) + { + foreach ($key as $name => $value) + { + $this->{$name} = $value; + } + } + else + { + $this->{$key} = $value; + } + + return $this; + } + + /** + * Assigns a value by reference. The benefit of binding is that values can + * be altered without re-setting them. It is also possible to bind variables + * before they have values. Assigned values will be available as a + * variable within the template file: + * + * // This reference can be accessed as {{ref}} within the template + * $view->bind('ref', $bar); + * + * @param string variable name + * @param mixed referenced variable + * @return $this + */ + public function bind($key, & $value) + { + $this->{$key} =& $value; + + return $this; + } +} diff --git a/classes/kostache.php b/classes/kostache.php index a51cd74..b36a1d2 100644 --- a/classes/kostache.php +++ b/classes/kostache.php @@ -1,126 +1,3 @@ $class)); - - return new $class($template, $view, $partials); - } - - /** - * KOstache class constructor. - * - * This method accepts a $template string and a $view object. Optionally, pass an associative - * array of partials as well. - * - * @access public - * @param string $template (default: null) - * @param mixed $view (default: null) - * @param array $partials (default: null) - * @return void - */ - public function __construct($template = null, $view = null, $partials = null) - { - parent::__construct($template, $view, $partials); - - $this->_charset = Kohana::$charset; - - // Override the template location to match kohana's conventions - if ( ! $this->_template) - { - $foo = explode('_', get_class($this)); - array_shift($foo); - $view_location = strtolower(implode('/', $foo)); - } - else - { - $view_location = $this->_template; - } - - $template = Kohana::find_file('templates', $view_location, 'mustache'); - - if ($template) - $this->_template = file_get_contents($template); - else - throw new Kohana_Exception('Template file not found: templates/'.$view_location); - - // Convert partials to expanded template strings - foreach ($this->_partials as $key => $partial_template) - { - if ($location = Kohana::find_file('templates', $partial_template, 'mustache')) - { - $this->_partials[$key] = file_get_contents($location); - } - } - } - - /** - * Assigns a variable by name. - * - * // This value can be accessed as {{foo}} within the template - * $view->set('foo', 'my value'); - * - * You can also use an array to set several values at once: - * - * // Create the values {{food}} and {{beverage}} in the template - * $view->set(array('food' => 'bread', 'beverage' => 'water')); - * - * @param string variable name or an array of variables - * @param mixed value - * @return $this - */ - public function set($key, $value = NULL) - { - if (is_array($key)) - { - foreach ($key as $name => $value) - { - $this->{$name} = $value; - } - } - else - { - $this->{$key} = $value; - } - - return $this; - } - - /** - * Assigns a value by reference. The benefit of binding is that values can - * be altered without re-setting them. It is also possible to bind variables - * before they have values. Assigned values will be available as a - * variable within the template file: - * - * // This reference can be accessed as {{ref}} within the template - * $view->bind('ref', $bar); - * - * @param string variable name - * @param mixed referenced variable - * @return $this - */ - public function bind($key, & $value) - { - $this->{$key} =& $value; - - return $this; - } -} +class Kostache extends Kohana_Kostache {}