/** * Load a controller callable * * @param \Symfony\Component\HttpFoundation\Request $request Symfony Request object * @return bool|Callable Callable or false * @throws \phpbb\controller\exception */ public function getController(Request $request) { $controller = $request->attributes->get('_controller'); if (!$controller) { throw new \phpbb\controller\exception('CONTROLLER_NOT_SPECIFIED'); } // Require a method name along with the service name if (stripos($controller, ':') === false) { throw new \phpbb\controller\exception('CONTROLLER_METHOD_NOT_SPECIFIED'); } list($service, $method) = explode(':', $controller); if (!$this->container->has($service)) { throw new \phpbb\controller\exception('CONTROLLER_SERVICE_UNDEFINED', array($service)); } $controller_object = $this->container->get($service); /* * If this is an extension controller, we'll try to automatically set * the style paths for the extension (the ext author can change them * if necessary). */ $controller_dir = explode('\\', get_class($controller_object)); // 0 vendor, 1 extension name, ... if (!is_null($this->template) && isset($controller_dir[1])) { $controller_style_dir = 'ext/' . $controller_dir[0] . '/' . $controller_dir[1] . '/styles'; if (is_dir($this->phpbb_root_path . $controller_style_dir)) { $this->template->set_style(array($controller_style_dir, 'styles')); } } return array($controller_object, $method); }
public function set_startpage() { $controller_service = $this->config['sitemaker_startpage_controller']; if ($this->user->page['page_name'] == 'index.' . $this->php_ext && $this->phpbb_container->has($controller_service) && !defined('STARTPAGE_IS_SET')) { $controller_object = $this->phpbb_container->get($controller_service); $method = $this->config['sitemaker_startpage_method']; // fail silently if startpage is not callable if (is_callable(array($controller_object, $method))) { $controller_dir = explode('\\', get_class($controller_object)); define('STARTPAGE_IS_SET', 1); $controller_style_dir = 'ext/' . $controller_dir[0] . '/' . $controller_dir[1] . '/styles'; $this->template->set_style(array($controller_style_dir, 'styles')); $arguments = explode('/', $this->config['sitemaker_startpage_params']); $this->startpage = true; $response = call_user_func_array(array($controller_object, $method), $arguments); $response->send(); $this->exit_handler(); } } }