From cabbb25fcc5c80c5b5279145c508966e1e5e76e5 Mon Sep 17 00:00:00 2001 From: Mike Cao Date: Wed, 9 Dec 2015 00:52:27 -0800 Subject: [PATCH] Added support for custom template file extensions. --- README.md | 1 + VERSION | 2 +- flight/Engine.php | 2 ++ flight/template/View.php | 20 ++++++++++++++------ tests/ViewTest.php | 29 ++++++++++++++++++++++++----- tests/views/world.html | 1 + 6 files changed, 43 insertions(+), 12 deletions(-) create mode 100644 tests/views/world.html diff --git a/README.md b/README.md index 523ff08..5aeaebb 100644 --- a/README.md +++ b/README.md @@ -828,6 +828,7 @@ The following is a list of all the available configuration settings: flight.handle_errors - Allow Flight to handle all errors internally. (default: true) flight.log_errors - Log errors to the web server's error log file. (default: false) flight.views.path - Directory containing view template files. (default: ./views) + flight.views.extension - View template file extension. (default: .php) # Framework Methods diff --git a/VERSION b/VERSION index f69752a..b66183a 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.2.16 +1.2.17 diff --git a/flight/Engine.php b/flight/Engine.php index 809399d..9d1e941 100644 --- a/flight/Engine.php +++ b/flight/Engine.php @@ -90,6 +90,7 @@ class Engine { $this->loader->register('router', '\flight\net\Router'); $this->loader->register('view', '\flight\template\View', array(), function($view) use ($self) { $view->path = $self->get('flight.views.path'); + $view->extension = $self->get('flight.views.extension'); }); // Register framework methods @@ -107,6 +108,7 @@ class Engine { $this->set('flight.handle_errors', true); $this->set('flight.log_errors', false); $this->set('flight.views.path', './views'); + $this->set('flight.views.extension', '.php'); $initialized = true; } diff --git a/flight/template/View.php b/flight/template/View.php index 2c4e95c..a0bc3c3 100644 --- a/flight/template/View.php +++ b/flight/template/View.php @@ -21,6 +21,13 @@ class View { */ public $path; + /** + * File extension. + * + * @var string + */ + public $extension = '.php'; + /** * View variables. * @@ -151,16 +158,17 @@ class View { * @return string Template file location */ public function getTemplate($file) { - if ((substr($file, -4) != '.php')) { - $file .= '.php'; + $ext = $this->extension; + + if (!empty($ext) && (substr($file, -1 * strlen($ext)) != $ext)) { + $file .= $ext; } + if ((substr($file, 0, 1) == '/')) { return $file; } - else - { - return $this->path.'/'.$file; - } + + return $this->path.'/'.$file; } /** diff --git a/tests/ViewTest.php b/tests/ViewTest.php index 4e44975..82572d4 100644 --- a/tests/ViewTest.php +++ b/tests/ViewTest.php @@ -16,13 +16,13 @@ class ViewTest extends PHPUnit_Framework_TestCase */ private $view; - function setUp(){ + function setUp() { $this->view = new \flight\template\View(); $this->view->path = __DIR__.'/views'; } // Set template variables - function testVariables(){ + function testVariables() { $this->view->set('test', 123); $this->assertEquals(123, $this->view->get('test')); @@ -36,22 +36,41 @@ class ViewTest extends PHPUnit_Framework_TestCase } // Check if template files exist - function testTemplateExists(){ + function testTemplateExists() { $this->assertTrue($this->view->exists('hello.php')); $this->assertTrue(!$this->view->exists('unknown.php')); } // Render a template - function testRender(){ + function testRender() { $this->view->render('hello', array('name' => 'Bob')); $this->expectOutputString('Hello, Bob!'); } // Fetch template output - function testFetch(){ + function testFetch() { $output = $this->view->fetch('hello', array('name' => 'Bob')); $this->assertEquals('Hello, Bob!', $output); } + + // Default extension + function testTemplateWithExtension() { + $this->view->set('name', 'Bob'); + + $this->view->render('hello.php'); + + $this->expectOutputString('Hello, Bob!'); + } + + // Custom extension + function testTemplateWithCustomExtension() { + $this->view->set('name', 'Bob'); + $this->view->extension = '.html'; + + $this->view->render('world'); + + $this->expectOutputString('Hello world, Bob!'); + } } diff --git a/tests/views/world.html b/tests/views/world.html new file mode 100644 index 0000000..05d95c0 --- /dev/null +++ b/tests/views/world.html @@ -0,0 +1 @@ +Hello world, ! \ No newline at end of file