Modules

Request_Client_Internal
extends Kohana_Request_Client_Internal
extends Request_Client
extends Kohana_Request_Client

Request Client for internal execution

package
Kohana
category
Base
author
Kohana Team
copyright
© 2008-2012 Kohana Team
license
http://kohanaframework.org/license
since
3.1.0

Class declared in SYSPATH/classes/request/client/internal.php on line 3.

Properties

protected Cache $_cache

Caching library for request caching

protected array $_previous_environment

Methods

public execute_request( Request $request ) (defined in Kohana_Request_Client_Internal)

Processes the request, executing the controller action that handles this request, determined by the Route.

  1. Before the controller action is called, the Controller::before method will be called.
  2. Next the controller action will be called.
  3. After the controller action is called, the Controller::after method will be called.

By default, the output from the controller is captured and returned, and no headers are sent.

$request->execute();
 
        will be removed in 3.2

Parameters

  • Request $request required - $request

Tags

  • Throws - Kohana_Exception
  • Uses - [Kohana::$profiling], [Profiler]
  • Deprecated - passing $params to controller methods deprecated since version 3.1

Return Values

  • Response

Source Code

public function execute_request(Request $request)
{
    // 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
    {
        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();
 
        // 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);
        $method->invoke($controller);
 
        // Execute the "after action" method
        $class->getMethod('after')->invoke($controller);
    }
    catch (Exception $e)
    {
        // Restore the previous request
        if ($previous instanceof 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);
    }
 
    // Return the response
    return $request->response();
}

public __construct( [ array $params = array(0) ] ) (defined in Kohana_Request_Client)

Creates a new Request_Client object, allows for dependency injection.

Parameters

  • array $params = array(0) - Params

Source Code

public function __construct(array $params = array())
{
    foreach ($params as $key => $value)
    {
        if (method_exists($this, $key))
        {
            $this->$key($value);
        }
    }
}

public cache( [ HTTP_Cache $cache = NULL ] ) (defined in Kohana_Request_Client)

Getter and setter for the internal caching engine, used to cache responses if available and valid.

Parameters

  • HTTP_Cache $cache = NULL - Engine to use for caching

Return Values

  • HTTP_Cache
  • Request_Client

Source Code

public function cache(HTTP_Cache $cache = NULL)
{
    if ($cache === NULL)
        return $this->_cache;
 
    $this->_cache = $cache;
    return $this;
}

public execute( Request $request ) (defined in Kohana_Request_Client)

Processes the request, executing the controller action that handles this request, determined by the Route.

  1. Before the controller action is called, the Controller::before method will be called.
  2. Next the controller action will be called.
  3. After the controller action is called, the Controller::after method will be called.

By default, the output from the controller is captured and returned, and no headers are sent.

$request->execute();

Parameters

  • Request $request required - $request

Tags

Return Values

  • Response

Source Code

public function execute(Request $request)
{
    if ($this->_cache instanceof HTTP_Cache)
        return $this->_cache->execute($this, $request);
 
    return $this->execute_request($request);
}