12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- <?php namespace System;
- class Route {
- /**
- * The route callback or array.
- *
- * @var mixed
- */
- public $route;
- /**
- * The parameters that will passed to the route function.
- *
- * @var array
- */
- public $parameters;
- /**
- * Create a new Route instance.
- *
- * @param mixed $route
- * @param array $parameters
- * @return void
- */
- public function __construct($route, $parameters = array())
- {
- $this->route = $route;
- $this->parameters = $parameters;
- }
- /**
- * Execute the route function.
- *
- * @param mixed $route
- * @param array $parameters
- * @return mixed
- */
- public function call()
- {
- $response = null;
- // --------------------------------------------------------------
- // If the route just has a callback, call it.
- // --------------------------------------------------------------
- if (is_callable($this->route))
- {
- $response = call_user_func_array($this->route, $this->parameters);
- }
- // --------------------------------------------------------------
- // The route value is an array. We'll need to evaluate it.
- // --------------------------------------------------------------
- elseif (is_array($this->route))
- {
- // --------------------------------------------------------------
- // Call the "before" route filters.
- // --------------------------------------------------------------
- $response = isset($this->route['before']) ? Filter::call($this->route['before']) : null;
- // --------------------------------------------------------------
- // Call the route callback.
- // --------------------------------------------------------------
- if (is_null($response) and isset($this->route['do']))
- {
- $response = call_user_func_array($this->route['do'], $this->parameters);
- }
- }
- // --------------------------------------------------------------
- // Make sure the response is a Response instance.
- // --------------------------------------------------------------
- $response = ( ! $response instanceof Response) ? new Response($response) : $response;
- // --------------------------------------------------------------
- // Call the "after" route filters.
- // --------------------------------------------------------------
- if (is_array($this->route) and isset($this->route['after']))
- {
- Filter::call($this->route['after'], array($response));
- }
- return $response;
- }
- }
|