public function controller()
{
if (is_string($this->controller) && !is_callable($this->controller) && !class_exists($this->controller)) {
throw new Exception\InvalidControllerException(sprintf('Invalid controller specified: "%s"', $this->controller));
}
if (is_string($this->controller) && !is_callable($this->controller) && class_exists($this->controller)) {
$controller = $this->controller;
$this->controller = new $controller();
}
if (!is_callable($this->controller)) {
$controller = $this->controller;
if (is_array($controller)) {
$method = array_pop($controller);
$controller = array_pop($controller);
if (is_object($controller)) {
$controller = get_class($controller);
}
$controller .= '::' . $method;
}
if (is_object($controller)) {
$controller = get_class($controller);
}
throw new Exception\InvalidControllerException(sprintf('Controller "%s" is not callable', $controller));
}
return $this->controller;
}