aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGravatar Marien Fressinaud <dev@marienfressinaud.fr> 2014-12-06 15:20:20 +0100
committerGravatar Marien Fressinaud <dev@marienfressinaud.fr> 2014-12-06 15:20:20 +0100
commita08c382e0651f22a7db06feba225f3d49289763d (patch)
treefd1077c02192bf86674c3144efc158a78019d6c1 /lib
parentc6a682deb94111c1e14cf10e565da3f4214f02dc (diff)
Separate views registration from controllers one.
- Add an Extension->registerViews() method. - Views are first searched in extension paths, then in APP_PATH. - It gives a way to override easily existing controllers / views. - Change include into an include_once in Dispatcher for new controllers. See https://github.com/FreshRSS/FreshRSS/issues/252
Diffstat (limited to 'lib')
-rw-r--r--lib/Minz/Dispatcher.php6
-rw-r--r--lib/Minz/Extension.php7
-rw-r--r--lib/Minz/View.php28
3 files changed, 32 insertions, 9 deletions
diff --git a/lib/Minz/Dispatcher.php b/lib/Minz/Dispatcher.php
index edd59c7cc..125ce5757 100644
--- a/lib/Minz/Dispatcher.php
+++ b/lib/Minz/Dispatcher.php
@@ -95,10 +95,6 @@ class Minz_Dispatcher {
Minz_Exception::ERROR
);
}
-
- if (self::isRegistered($base_name)) {
- $this->setViewPath($this->controller, $base_name);
- }
}
/**
@@ -154,7 +150,7 @@ class Minz_Dispatcher {
private static function loadController($base_name) {
$base_path = self::$registrations[$base_name];
$controller_filename = $base_path . '/controllers/' . $base_name . 'Controller.php';
- include($controller_filename);
+ include_once $controller_filename;
}
private static function setViewPath($controller, $base_name) {
diff --git a/lib/Minz/Extension.php b/lib/Minz/Extension.php
index 5a61ba2e0..490a5c5cb 100644
--- a/lib/Minz/Extension.php
+++ b/lib/Minz/Extension.php
@@ -146,4 +146,11 @@ class Minz_Extension {
public function registerController($base_name) {
Minz_Dispatcher::registerController($base_name, $this->path);
}
+
+ /**
+ * Register the views in order to be accessible by the application.
+ */
+ public function registerViews() {
+ Minz_View::addBasePathname($this->path);
+ }
}
diff --git a/lib/Minz/View.php b/lib/Minz/View.php
index bdfbbe63c..1bc2e862d 100644
--- a/lib/Minz/View.php
+++ b/lib/Minz/View.php
@@ -12,10 +12,10 @@ class Minz_View {
const LAYOUT_PATH_NAME = '/layout';
const LAYOUT_FILENAME = '/layout.phtml';
- private $base_pathname = APP_PATH;
private $view_filename = '';
private $use_layout = null;
+ private static $base_pathnames = array(APP_PATH);
private static $title = '';
private static $styles = array ();
private static $scripts = array ();
@@ -41,8 +41,15 @@ class Minz_View {
. $action_name . '.phtml';
}
- public function setBasePathname($base_pathname) {
- $this->base_pathname = $base_pathname;
+ /**
+ * Add a base pathname to search views.
+ *
+ * New pathnames will be added at the beginning of the list.
+ *
+ * @param $base_pathname the new base pathname.
+ */
+ public static function addBasePathname($base_pathname) {
+ array_unshift(self::$base_pathnames, $base_pathname);
}
/**
@@ -74,7 +81,20 @@ class Minz_View {
* Affiche la Vue en elle-même
*/
public function render () {
- if ((include($this->base_pathname . $this->view_filename)) === false) {
+ $view_found = false;
+
+ // We search the view in the list of base pathnames. Only the first view
+ // found is considered.
+ foreach (self::$base_pathnames as $base) {
+ $filename = $base . $this->view_filename;
+ if (file_exists($filename)) {
+ include $filename;
+ $view_found = true;
+ break;
+ }
+ }
+
+ if (!$view_found) {
Minz_Log::notice('File not found: `' . $this->view_filename . '`');
}
}