Версия полностью совместимая c CMS
This commit is contained in:
parent
7ce493414e
commit
75bb35d5bf
21 changed files with 1404 additions and 783 deletions
|
|
@ -2,25 +2,37 @@
|
|||
|
||||
/**
|
||||
* Первичный контроллер контроллер страниц
|
||||
* @package core
|
||||
* @package system.controller
|
||||
*/
|
||||
class Controller_Front extends Controller_Action
|
||||
{
|
||||
|
||||
|
||||
/** @var Shortcut */
|
||||
protected $shortcut; // Ярлык к модулю
|
||||
protected $_param; // Параметр по которому выбирается модуль
|
||||
protected $default; // Значение параметра по умолчанию
|
||||
|
||||
public function __construct(Settings $_registry, $_shortcut)
|
||||
protected $modules = array();
|
||||
|
||||
/**
|
||||
* @param Settings $_registry
|
||||
* @param Shortcut $_shortcut
|
||||
*/
|
||||
public function __construct(Settings $_registry, $_shortcut) // $db, $installer, $shortcut
|
||||
{
|
||||
parent::__construct();
|
||||
$registry = $_registry;
|
||||
$this->_registry = $_registry;
|
||||
$this->_shortcut = $_shortcut;
|
||||
$this->_shortcut = $_shortcut; // $cc->newShortcut();
|
||||
|
||||
$this->db = Database::getConnection($registry->readKey(array('system', 'dsn')));
|
||||
$dsn = $registry->readKey(array('system', 'dsn'));
|
||||
$this->db = Database::getConnection($dsn); // $cc->newConnection();
|
||||
}
|
||||
|
||||
public function isLoaded($name)
|
||||
{
|
||||
return isset($this->modules[$name]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Создает экземпляр модуля и выполняет действия для него
|
||||
|
|
@ -28,15 +40,22 @@ class Controller_Front extends Controller_Action
|
|||
* @param request $request Имя модуля
|
||||
* @return string
|
||||
*/
|
||||
public function loadModule($name, Collection $request)
|
||||
public function loadModule($name, Collection $request, $controller = false)
|
||||
{
|
||||
if ($this->isLoaded($name)) {
|
||||
$module = $this->modules[$name];
|
||||
return $module->access->execute($request);
|
||||
}
|
||||
|
||||
$moduleFile = Shortcut::getUrl($this->shortcut, $name); // ModuleLoader (2)
|
||||
$module = $this->loadClass($moduleFile);
|
||||
if ($controller) {
|
||||
$moduleFile = Shortcut::getUrl($this->shortcut, $name, $controller); // ModuleLoader (2)
|
||||
} else {
|
||||
$moduleFile = Shortcut::getUrl($this->shortcut, $name, $name); // ModuleLoader (2)
|
||||
}
|
||||
|
||||
$module = $this->loadClass($moduleFile, null, 'Module_');
|
||||
if ($module) {
|
||||
// Инициализация модуля
|
||||
// $module->viewPath = dirname($moduleFile);
|
||||
$module->viewPath = Shortcut::getUrl('modulepath', $name);
|
||||
$module->name = $name;
|
||||
|
||||
|
|
@ -51,15 +70,17 @@ class Controller_Front extends Controller_Action
|
|||
$module->db = $this->db;
|
||||
// Не для всех приложений нужно вести лог действий
|
||||
// Ведение лога
|
||||
$logger = $this->loadClass(FRAMEWORK_PATH . '/src/filter/actionlogger.php', $module);
|
||||
$logger = $this->loadClass(FRAMEWORK_PATH . '/filter/actionlogger.php', $module, 'Filter_');
|
||||
$logger->before = $this->loadSettings(Shortcut::getUrl('logger', $name));
|
||||
// Управление доступом
|
||||
$module->access = $this->loadClass(FRAMEWORK_PATH . '/src/filter/actionaccess.php', $logger);
|
||||
$module->access = $this->loadClass(FRAMEWORK_PATH . '/filter/actionaccess.php', $logger, 'Filter_');
|
||||
$module->access->access = $this->loadSettings(Shortcut::getUrl('access', $name));
|
||||
|
||||
$module->setUp();
|
||||
|
||||
return $module->access->execute($request);
|
||||
$this->modules[$name] = $module;
|
||||
$result = $module->access->execute($request);
|
||||
return $result;
|
||||
}
|
||||
return null; // throw new FileNotFoundException();
|
||||
}
|
||||
|
|
@ -72,13 +93,14 @@ class Controller_Front extends Controller_Action
|
|||
$this->default = $name;
|
||||
}
|
||||
|
||||
private function getParameter(Collection $list)
|
||||
{
|
||||
return ($list->get($this->_param)) ? $list->get($this->_param): $this->default;
|
||||
}
|
||||
|
||||
public function execute(HTTPRequest $request)
|
||||
{
|
||||
return $this->loadModule($this->getParameter($request), $request);
|
||||
$name = explode("_", $request->get($this->_param, $this->default));
|
||||
if (count($name) >= 2) {
|
||||
$controller = $name[1];
|
||||
} else {
|
||||
$controller = false;
|
||||
}
|
||||
return $this->loadModule($name[0], $request, $controller);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue