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);
}