private function dispatch() { if ($this->arguments["command"] == "") { $this->error("can't call empty command"); } $fileName = "{$this->arguments['script']}_{$this->arguments['command']}"; $className = Inflector::camelize($fileName); if ($command =& ClassRegistry::load($className, "Command")) { if (can_call_method($command, "execute")) { call_user_func_array(array($command, "execute"), $this->arguments["params"]); } else { $this->error("can't execute command {$className}"); } } else { $this->error("command {$className} not found"); } }
/** * Chama o controller e a action solicitadas pela URL. * * @return mixed Instância do novo controller ou falso em caso de erro */ public function dispatch() { $path = Mapper::parse(); $path["controller"] = Inflector::hyphenToUnderscore($path["controller"]); $path["action"] = Inflector::hyphenToUnderscore($path["action"]); $controller_name = Inflector::camelize($path["controller"]) . "Controller"; if ($controller =& ClassRegistry::load($controller_name, "Controller")) { if (!can_call_method($controller, $path['action']) && !App::path("View", "{$path['controller']}/{$path['action']}.{$path['extension']}")) { $this->error("missingAction", array("controller" => $path["controller"], "action" => $path["action"])); return false; } } else { if (App::path("View", "{$path['controller']}/{$path['action']}.{$path['extension']}")) { $controller =& ClassRegistry::load("AppController", "Controller"); } else { $this->error("missingController", array("controller" => $path["controller"])); return false; } } $controller->params = $path; $controller->componentEvent("initialize"); $controller->beforeFilter(); $controller->componentEvent("startup"); if (in_array($path["action"], $controller->methods) && can_call_method($controller, $path["action"])) { $params = $path["params"]; if (!is_null($path["id"])) { $params = array_merge(array($path["id"]), $params); } call_user_func_array(array(&$controller, $path["action"]), $params); } if ($controller->autoRender) { $controller->render(); } $controller->componentEvent("shutdown"); echo $controller->output; $controller->afterFilter(); return $controller; }
/** * Executa um evento em todos os componentes do controller. * * @param string $event Evento a ser executado * @return void */ public function componentEvent($event = null) { foreach ($this->components as $component) { $className = "{$component}Component"; if (can_call_method($this->{$className}, $event)) { $this->{$className}->{$event}($this); } else { trigger_error("Can't call method {$event} in {$className}", E_USER_WARNING); } } }