/** * Вызов задач повешанных на событие * * @param string $events_name название обытия */ public static function fire_events($events_name) { // задач на собыьтие не создано if (!isset(self::$events[$events_name])) { return false; } // задачи на событие есть - выполняем их поочередно foreach (self::$events[$events_name] as $event) { if (is_callable($event)) { JDEBUG ? joosDebug::add(sprintf('Запускаем обработку события %s', $events_name)) : null; call_user_func_array($event, func_get_args()); } } }
/** * Автоматическое определение и запуск метода действия * @todo добавить сюда события events ДО, ПОСЛЕ и ВМЕСТО выполнения задачи контроллера */ public function run() { $router = $this->router = joosCore::instance()->get_router(); $controller_class_name = 'actions' . ucfirst($router->param('controller')); $controller = new $controller_class_name(); $action = $router->param('action'); JDEBUG ? joosDebug::add($controller_class_name . '->' . $action) : null; if (method_exists($controller_class_name, $action)) { $results = $controller->{$action}(); $page_body = $this->views($results); // главное содержимое - стек вывода компонента - mainbody joosDocument::set_body($page_body); return $this; } else { // в контроллере нет запрашиваемого метода joosPages::page404('Метод не найден'); } }
public static function dispatch_ajax() { $id = joosRequest::int('id', 0); $page = joosRequest::int('page', false, $_GET); $page = $page ? $page : 0; $id = $id ? $id : $page; $task = joosRequest::param('task', 'index'); $option = joosRequest::param('option'); $class = 'actionsAjaxAdmin' . ucfirst($option); JDEBUG ? joosDebug::add($class . '::' . $task) : null; // в контроллере можно прописать общие действия необходимые при любых действиях контроллера - они будут вызваны первыми, например подклбчение можделей, скриптов и т.д. method_exists($class, 'action_before') ? call_user_func_array($class . '::action_before', array()) : null; $events_name = sprintf('ajax.controller.admin.*'); joosEvents::has_events($events_name) ? joosEvents::fire_events($events_name, $class, $task) : null; $events_name = sprintf('ajax.controller.admin.%s.*', $class); joosEvents::has_events($events_name) ? joosEvents::fire_events($events_name, $task) : null; $events_name = sprintf('ajax.controller.admin.%s.%s', $class, $task); joosEvents::has_events($events_name) ? joosEvents::fire_events($events_name) : null; if (method_exists($class, $task)) { $result = call_user_func_array($class . '::' . $task, array($option, $id, $page, $task)); } else { $result = call_user_func_array($class . '::index', array($option, $id, $page, $task)); } // контроллер может содержать метод вызываемый после окончания работы основного контроллера, но тоже вызовется method_exists($class, 'action_after') ? call_user_func_array($class . '::action_after', array($task, $result)) : null; if (is_array($result)) { echo json_encode($result); } elseif (is_string($result)) { echo $result; } }