private function setValue($value, $name, $def, $args, $use_setter = true) { if (isset($this->_proxied_fields[$name]) && $this->getProxy()) { return $this->getProxy()->setValue($value, $name, $def, $args); } $name = isset($def['alias']) ? $def['alias'] : $name; if ($use_setter) { $setter = 'set' . String::camelize($name, true); if (method_exists($this, $getter)) { return $this->{$setter}($value); } } return $this->set($name, $this->parseValue($value, $name, $def, $args)); }
public function run($force_uri = null) { $this->_force_route = false; if (php_sapi_name() == 'cli') { return array(); } if ($this->_config->base) { Request::init($this->_config->base); } $request = $this->getRequest(); if ($force_uri) { $request->setUri($force_uri); } $uri = $request->getUri(); $this->getResponse()->setHeader('X-Base-Uri', $uri); if ($this->_config->routes) { foreach ($this->_config->routes->getData() as $route => $to) { if ($uri == $route) { $this->getResponse()->setHeader('X-Route-Match', $route); $this->getResponse()->setHeader('X-Route-Uri', $to); $request->setUri($to); break; } elseif (fnmatch($route, $uri)) { if (!stristr($to, '*') && !stristr($to, '{')) { $this->getResponse()->setHeader('X-Route-Match', $route); $this->getResponse()->setHeader('X-Route-Uri', $to); $request->setUri($to); break; } $this->getResponse()->setHeader('X-Route-Match', $route); $this->getResponse()->setHeader('X-Route-To-Pattern', $to); $route = str_replace('/*/', '/%[^/]/', $route); $route = str_replace('/*', '/%s', $route); $new_match = stristr($to, '{'); $out = sscanf($uri, $route); $elem = 1; foreach ($out as $match) { if ($new_match) { $to = preg_replace('!\\{' . $elem . '\\}!', $match, $to, 1); } else { $to = preg_replace('!\\*!', $match, $to, 1); } $elem++; } $this->getResponse()->setHeader('X-Route-Uri', $to); $request->setUri($to); break; } } } if ($this->_config->modules) { $uri = $request->getUri(); foreach ($this->_config->modules->getData() as $name => $module) { if ($uri == "/{$name}" || fnmatch("/{$name}/*", $uri)) { $this->getResponse()->setHeader('X-Active-Module', $name); $this->_active_module = $module; $this->_active_module['name'] = $name; $this->_config->setModule($name); } } } $request->clearSegmentIdentifiers(); if ($this->_active_module) { $request->addSegmentIdentifier('module', 'module'); } $request->addSegmentIdentifier('controller', 'index'); $request->addSegmentIdentifier('action', 'index'); $uri = $request->getSegmentIdentifiers(); $this->_controller = $uri['controller']; $this->_action = $uri['action']; if (function_exists('newrelic_name_transaction')) { if ($this->_active_module) { newrelic_name_transaction("{$this->_active_module['name']}/{$this->_controller}/{$this->_action}"); } else { newrelic_name_transaction("{$this->_controller}/{$this->_action}"); } } $controller = String::camelize($this->_controller, true); $action = String::camelize($this->_action . '_action'); $this->setLayout($this->_config->layout); $this->_layout->set('controller', $this->_controller); $this->_layout->set('action', $this->_action); if ($this->_active_module) { $this->_layout->set('module', $this->_active_module['name']); } $this->loadController($controller, $action, $uri['uri']); if ($this->_force_route) { return $this->run($this->_force_route); } $this->sendResponse(200, $this->_layout->render()); }