public function assembleRoute(Request $request, Response $response) { $path = $request->getPathInfo(); $path = explode('/', trim($path, '/')); $path = array_pad($path, 7, null); array_shift($path); $tmp = array_shift($path); $matches = array(); if (preg_match('/^v([1-9])$/', $tmp, $matches) === 1) { $version = (int) $matches[1]; $type = array_shift($path); } else { $version = 1; $type = $tmp; } $id = !empty($path[0]) ? $path[0] : false; $subType = !empty($path[1]) ? $path[1] : false; $subId = !empty($path[2]) ? $path[2] : false; $request->setControllerName($type); $request->setParam('id', $id); $request->setParam('subId', $subId); $request->setParam('version', $version); $method = strtoupper($request->getParam('_method', $request->getMethod())); $action = 'invalid'; if ($method === 'GET' && $id === false) { $action = 'index'; $response->setHttpResponseCode(200); } elseif ($method === 'GET') { $action = 'get'; $response->setHttpResponseCode(200); } elseif ($method === 'PUT' && $id === false) { $action = 'batch'; $response->setHttpResponseCode(200); } elseif ($method === 'PUT') { $action = 'put'; } elseif ($method === 'POST') { $action = 'post'; // Set default http status code for successfull request $response->setHttpResponseCode(201); } elseif ($method === 'DELETE' && $id === false) { $action = 'batchDelete'; $response->setHttpResponseCode(200); } elseif ($method === 'DELETE') { $response->setHttpResponseCode(200); $action = 'delete'; } if ($action == 'invalid') { $request->setControllerName('index'); $request->setActionName($action); return; } if (!$subType) { $request->setActionName($action); return; } if ($action == 'get' && $subId === false) { $subAction = $subType . 'Index'; } else { $subAction = $subType; } $action = $action . ucfirst($subAction); $request->setActionName($action); }
/** * Returns the controller class of the given request class. The class name is imploded by '_' * @param Enlight_Controller_Request_Request $request * @return array|string */ public function getControllerClass(Enlight_Controller_Request_Request $request) { if (!$request->getControllerName()) { $request->setControllerName($this->defaultController); } if (!$request->getModuleName()) { $request->setModuleName($this->defaultModule); } $module = $request->getModuleName(); $this->curModule = $module; $this->curDirectory = $this->getControllerDirectory($module); $moduleName = $this->formatModuleName($module); $controllerName = $this->formatControllerName($request->getControllerName()); $class = array(Enlight_Application::Instance()->App(), 'Controllers', $moduleName, $controllerName); $class = implode('_', $class); return $class; }
/** * @param Request $request */ protected function initServiceMode($request) { $config = $this->Application()->Config(); if (!empty($config->setOffline) && strpos($config->offlineIp, $request->getClientIp()) === false) { if ($request->getControllerName() != 'error') { $request->setControllerName('error')->setActionName('service')->setDispatched(false); } } }