示例#1
0
 protected function _prepareResource(Prest_Request $i_request)
 {
     $resource = null;
     $matched_route = $this->_router->getMatchedRoute($i_request->getUrl());
     if (!$matched_route) {
         throw new Prest_Exception(null, Prest_Response::NOT_FOUND);
     }
     $resource_name = $matched_route['resource'];
     $resource_dir = $this->_service->getResourceDirectory($resource_name);
     $file_name = basename($resource_name);
     $file = "{$resource_dir}/{$file_name}.php";
     if (is_dir($resource_dir) and is_file($file)) {
         require_once $file;
         $config = array('service' => $this->_service, 'request' => $i_request, 'directory' => $resource_dir, 'action_type' => $matched_route['type'], 'action' => $matched_route['type'] . ucfirst($i_request->getMethod()), 'route_params' => $matched_route['params'], 'matched_route' => $matched_route);
         if ($matched_route['class']) {
             $class = $matched_route['class'];
         } else {
             $class = $file_name;
         }
         $resource = new $class($config);
         return $resource;
     } else {
         throw new Prest_Exception(null, Prest_Response::NOT_FOUND);
     }
 }
示例#2
0
 public function dispatch()
 {
     if (!$this->_transaction) {
         $this->_transaction = new Prest_Transaction();
     }
     $response = null;
     try {
         $request = new Prest_Request(array('service' => $this));
         if (!$request->isGet()) {
             $this->_transaction->begin();
         }
         $representation = $this->_dispatcher->dispatch($request);
         $response = new Prest_Response($representation);
         if ($this->_transaction->isStarted()) {
             $this->_transaction->finish();
         }
         $response->send();
     } catch (Prest_Exception $e) {
         $this->_handlePrestException($e);
     } catch (Exception $e) {
         $this->_handleErrorException($e);
     }
 }