public function action($name, $arguments = array()) { //TODO: Check Permission $action_info = explode('.', $name); $action = array_shift($action_info); $hasWidget = (bool) ("widget" == strtolower(array_shift($action_info))); if ($hasWidget) { $action[0] = strtoupper($action[0]); $widgetClass = sprintf("%s_%s_%s", get_class($this), $this->getWidgetFolder(), $action); $widget = new Joy_Reflection($widgetClass); return $widget->newInstance($arguments); } else { return parent::action($action, $arguments); } # $view = Joy_View($template, # $this->assign; # var_dump($hasWidget, $action); }
public function setAction($controller, $action, $action_arguments = array()) { $this->_current->controller = Joy_Controller::factory($controller); $this->_current->action->name = $action; $this->_current->action->arguments = (array) $action_arguments; }
public function match($uri) { list($uri) = explode("&", $uri); list($uri) = explode("?", $uri); $atoms = (array) explode("/", $uri); $uri = ""; foreach ($atoms as $atom) { if (empty($atom)) { continue; } $uri .= "/{$atom}"; } $uri = sprintf("%s", trim($uri, DIRECTORY_SEPARATOR)); $site_root = trim($this->config->application->get("application/site_root"), DIRECTORY_SEPARATOR); if (!empty($site_root)) { $uri = str_replace($site_root, "", $uri); } foreach ($this->_items as $key => $item) { // check uri if (preg_match("/^{$item->filter}/i", "/{$uri}/", $matches)) { $matched_uri = str_replace($matches[0], "", $uri); array_shift($matches); // match uri $action_arguments = array(); if ($matched_uri != "") { $action_arguments = explode("/", trim($matched_uri, DIRECTORY_SEPARATOR)); } // merge filter variables $parameters = array(); foreach ($item->variables as $key) { if (!empty($key)) { $parameters[$key] = trim(array_shift($matches), DIRECTORY_SEPARATOR); } } // set controller variable if (!isset($item->controller)) { $item->controller = $parameters["controller"]; unset($parameters["controller"]); } // set action variable if (!isset($item->action)) { $item->action = $parameters["action"]; unset($parameters["action"]); } // set action arguments $item->action_arguments = array_merge(array_values((array) $parameters), (array) $action_arguments); // clear action from extension $action_info = explode(".", $item->action); // set extension variable if (!isset($item->action_extension)) { array_shift($action_info); $item->action_extension = count($action_info) ? implode(".", $action_info) : null; } //set parameters $item->parameters = array_merge((array) $parameters, $_REQUEST); // unset filter values unset($item->filter); unset($item->variables); // set render variable if (!isset($item->render)) { $item->render = Joy_Render_Factory::get($item->action_extension); } // set request method $item->method = $_SERVER["REQUEST_METHOD"]; // controller exists $result = clone $item; if (Joy_Controller::exists($result->controller)) { break; } } else { $result = null; } } return is_null($result) ? null : new Joy_Router_Match($result); }