Exemple #1
0
 public static function dispatch()
 {
     $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', 'site');
     $class = 'actionsAdmin' . joosInflector::camelize($option);
     self::$active_actions_class = $class;
     self::$option = $option;
     self::$task = $task;
     // подключаем js код библиотеки
     joosDocument::instance()->add_js_file(JPATH_SITE . '/core/libraries/autoadmin/media/js/autoadmin.js');
     !JDEBUG ?: joosDebug::add('joosAutoadmin::dispatch() - ' . $class . '::' . $task);
     // в контроллере можно прописать общие действия необходимые при любых действиях контроллера - они будут вызваны первыми, например подклбчение можделей, скриптов и т.д.
     method_exists($class, 'action_before') ? call_user_func_array($class . '::action_before', array(self::$task)) : null;
     $events_name = sprintf('controller.admin.*');
     joosEvents::has_events($events_name) ? joosEvents::fire_events($events_name, $class, $task) : null;
     $events_name = sprintf('controller.admin.%s.*', $class);
     joosEvents::has_events($events_name) ? joosEvents::fire_events($events_name, $task) : null;
     $events_name = sprintf('controller.admin.%s.%s', $class, $task);
     joosEvents::has_events($events_name) ? joosEvents::fire_events($events_name) : null;
     if (method_exists($class, $task)) {
         $results = call_user_func_array($class . '::' . $task, array($option, $id, $page, $task));
         method_exists($class, 'action_after') ? call_user_func_array($class . '::action_after', array(self::$task)) : null;
     } elseif (method_exists($class, 'index')) {
         $results = call_user_func_array($class . '::index', array($option, $id, $page, $task));
         method_exists($class, 'action_after') ? call_user_func_array($class . '::action_after', array(self::$task)) : null;
     } else {
         throw new joosException('Контроллер :controller, либо требуемая задача :task не найдены.', array(':controller' => $class, ':task' => $task));
     }
     if (is_array($results)) {
         self::views($results, self::$option, self::$task);
     } elseif (is_string($results)) {
         echo $results;
     }
     // если контроллер содержит метод вызываемый после окончания работы основного контроллера, то он тоже вызовется
     method_exists($class, 'action_after') ? call_user_func_array($class . '::action_after', array()) : null;
 }