芝麻web文件管理V1.00
编辑当前文件:/home/prismawe/www/resupres/system/classes/kohana/request/client/internal.php
execute(); * * @param Request $request * @return Response * @throws Kohana_Exception * @uses [Kohana::$profiling] * @uses [Profiler] * @deprecated passing $params to controller methods deprecated since version 3.1 * will be removed in 3.2 */ public function execute(Request $request) { // Check for cache existance if ($this->_cache instanceof Cache AND ($response = $this->cache_response($request)) instanceof Response) return $response; // Create the class prefix $prefix = 'controller_'; // Directory $directory = $request->directory(); // Controller $controller = $request->controller(); if ($directory) { // Add the directory name to the class prefix $prefix .= str_replace(array('\\', '/'), '_', trim($directory, '/')).'_'; } if (Kohana::$profiling) { // Set the benchmark name $benchmark = '"'.$request->uri().'"'; if ($request !== Request::$initial AND Request::$current) { // Add the parent request uri $benchmark .= ' « "'.Request::$current->uri().'"'; } // Start benchmarking $benchmark = Profiler::start('Requests', $benchmark); } // Store the currently active request $previous = Request::$current; // Change the current request to this request Request::$current = $request; // Is this the initial request $initial_request = ($request === Request::$initial); try { // Initiate response time $this->_response_time = time(); if ( ! class_exists($prefix.$controller)) { throw new HTTP_Exception_404('The requested URL :uri was not found on this server.', array(':uri' => $request->uri())); } // Load the controller using reflection $class = new ReflectionClass($prefix.$controller); if ($class->isAbstract()) { throw new Kohana_Exception('Cannot create instances of abstract :controller', array(':controller' => $prefix.$controller)); } // Create a new instance of the controller $controller = $class->newInstance($request, $request->response() ? $request->response() : $request->create_response()); $class->getMethod('before')->invoke($controller); // Determine the action to use $action = $request->action(); $params = $request->param(); // If the action doesn't exist, it's a 404 if ( ! $class->hasMethod('action_'.$action)) { throw new HTTP_Exception_404('The requested URL :uri was not found on this server.', array(':uri' => $request->uri())); } $method = $class->getMethod('action_'.$action); /** * Execute the main action with the parameters * * @deprecated $params passing is deprecated since version 3.1 * will be removed in 3.2. */ $method->invokeArgs($controller, $params); // Execute the "after action" method $class->getMethod('after')->invoke($controller); // Stop response time $this->_response_time = (time() - $this->_response_time); // Add the default Content-Type header to initial request if not present if ($initial_request AND ! $request->headers('content-type')) { $request->headers('content-type', Kohana::$content_type.'; charset='.Kohana::$charset); } } catch (Exception $e) { // Restore the previous request Request::$current = $previous; if (isset($benchmark)) { // Delete the benchmark, it is invalid Profiler::delete($benchmark); } // Re-throw the exception throw $e; } // Restore the previous request Request::$current = $previous; if (isset($benchmark)) { // Stop the benchmark Profiler::stop($benchmark); } // Cache the response if cache is available if ($this->_cache instanceof Cache) { $this->cache_response($request, $request->response()); } // Return the response return $request->response(); } } // End Kohana_Request_Client_Internal