Give possibility to register a new Controller.

- Add a Extension->registerController(name) method
- Controllers must be written in extension_dir/controllers/nameController.php
- Controllers must be named as FreshExtension_name_Controller
- Controllers must extend Minz_ActionController

See https://github.com/FreshRSS/FreshRSS/issues/252
This commit is contained in:
Marien Fressinaud committed 2014-12-05 14:48:09 +01:00
1 parent 9fc60317ee
commit f8aa66152f
2 files changed
+57 -3

No files matched your search

+44 -3
View File
@@ -15,6 +15,7 @@ class Minz_Dispatcher {
/* singleton */
private static $instance = null;
private static $needsReset;
private static $registrations = array();
private $controller;
@@ -38,7 +39,7 @@ class Minz_Dispatcher {
self::$needsReset = false;
try {
$this->createController ('FreshRSS_' . Minz_Request::controllerName () . '_Controller');
$this->createController (Minz_Request::controllerName ());
$this->controller->init ();
$this->controller->firstAction ();
if (!self::$needsReset) {
@@ -73,8 +74,11 @@ class Minz_Dispatcher {
* > pas une instance de ActionController
*/
private function createController ($controller_name) {
$filename = APP_PATH . self::CONTROLLERS_PATH_NAME . '/'
. $controller_name . '.php';
if (self::isRegistered($controller_name)) {
$controller_name = self::loadController($controller_name);
} else {
$controller_name = 'FreshRSS_' . $controller_name . '_Controller';
}
if (!class_exists ($controller_name)) {
throw new Minz_ControllerNotExistException (
@@ -114,4 +118,41 @@ class Minz_Dispatcher {
$action_name
));
}
/**
* Register a controller file.
*
* @param $base_name the base name of the controller (i.e. ./?c=<base_name>)
* @param $controller_name the name of the controller (e.g. HelloWorldController).
* @param $filename the file which contains the controller.
*/
public static function registerController($base_name, $controller_name, $filename) {
if (file_exists($filename)) {
self::$registrations[$base_name] = array(
$controller_name,
$filename,
);
}
}
/**
* Return if a controller is registered.
*
* @param $base_name the base name of the controller.
* @return true if the controller has been registered, false else.
*/
public static function isRegistered($base_name) {
return isset(self::$registrations[$base_name]);
}
/**
* Load a controller file (include) and return its name.
*
* @param $base_name the base name of the controller.
*/
private static function loadController($base_name) {
list($controller_name, $filename) = self::$registrations[$base_name];
include($filename);
return $controller_name;
}
}
+13
View File
@@ -136,4 +136,17 @@ class Minz_Extension {
'&amp;' . $mtime;
return Minz_Url::display($url);
}
/**
* Register a controller in the Dispatcher.
*
* @param @base_name the base name of the controller. Final name will be:
* FreshExtension_<base_name>_Controller.
*/
public function registerController($base_name) {
$controller_name = 'FreshExtension_' . $base_name . '_Controller';
$filename = $this->path . '/controllers/' . $base_name . 'Controller.php';
Minz_Dispatcher::registerController($base_name, $controller_name, $filename);
}
}