container = $container; } /** * Create a new Controller object * * @param string $viewName The name of the view we're getting a Controller for. * @param array $config Optional MVC configuration values for the Controller object. * * @return Controller */ public function controller($viewName, array $config = []) { $controllerClass = $this->container->getNamespacePrefix($this->getSection()) . 'Controller\\' . ucfirst($viewName); try { return $this->createController($controllerClass, $config); } catch (ControllerNotFound $e) { } $controllerClass = $this->container->getNamespacePrefix($this->getSection()) . 'Controller\\' . ucfirst($this->container->inflector->singularize($viewName)); $controller = $this->createController($controllerClass, $config); return $controller; } /** * Create a new Model object * * @param string $viewName The name of the view we're getting a Model for. * @param array $config Optional MVC configuration values for the Model object. * * @return Model */ public function model($viewName, array $config = []) { $modelClass = $this->container->getNamespacePrefix($this->getSection()) . 'Model\\' . ucfirst($viewName); try { return $this->createModel($modelClass, $config); } catch (ModelNotFound $e) { } $modelClass = $this->container->getNamespacePrefix($this->getSection()) . 'Model\\' . ucfirst($this->container->inflector->singularize($viewName)); $model = $this->createModel($modelClass, $config); return $model; } /** * Create a new View object * * @param string $viewName The name of the view we're getting a View object for. * @param string $viewType The type of the View object. By default it's "html". * @param array $config Optional MVC configuration values for the View object. * * @return View */ public function view($viewName, $viewType = 'html', array $config = []) { $container = $this->container; $prefix = $this->container->getNamespacePrefix($this->getSection()); $viewClass = $prefix . 'View\\' . ucfirst($viewName) . '\\' . ucfirst($viewType); try { return $this->createView($viewClass, $config); } catch (ViewNotFound $e) { } $viewClass = $prefix . 'View\\' . ucfirst($container->inflector->singularize($viewName)) . '\\' . ucfirst($viewType); $view = $this->createView($viewClass, $config); return $view; } /** * Creates a new Dispatcher * * @param array $config The configuration values for the Dispatcher object * * @return Dispatcher */ public function dispatcher(array $config = []) { $dispatcherClass = $this->container->getNamespacePrefix($this->getSection()) . 'Dispatcher\\Dispatcher'; try { return $this->createDispatcher($dispatcherClass, $config); } catch (DispatcherNotFound $e) { // Not found. Return the default Dispatcher return new Dispatcher($this->container, $config); } } /** * Creates a new Toolbar * * @param array $config The configuration values for the Toolbar object * * @return Toolbar */ public function toolbar(array $config = []) { $toolbarClass = $this->container->getNamespacePrefix($this->getSection()) . 'Toolbar\\Toolbar'; try { return $this->createToolbar($toolbarClass, $config); } catch (ToolbarNotFound $e) { // Not found. Return the default Toolbar return new Toolbar($this->container, $config); } } /** * Creates a new TransparentAuthentication handler * * @param array $config The configuration values for the TransparentAuthentication object * * @return TransparentAuthentication */ public function transparentAuthentication(array $config = []) { $authClass = $this->container->getNamespacePrefix($this->getSection()) . 'TransparentAuthentication\\TransparentAuthentication'; try { return $this->createTransparentAuthentication($authClass, $config); } catch (TransparentAuthenticationNotFound $e) { // Not found. Return the default TA return new TransparentAuthentication($this->container, $config); } } /** * Creates a view template finder object for a specific View * * The default configuration is: * Look for .php, .blade.php files; default layout "default"; no default sub-template; * look only for the specified view; do NOT fall back to the default layout or sub-template; * look for templates ONLY in site or admin, depending on where we're running from * * @param View $view The view this view template finder will be attached to * @param array $config Configuration variables for the object * * @return ViewTemplateFinder * * @throws Exception */ public function viewFinder(View $view, array $config = []) { // Initialise the configuration with the default values $defaultConfig = [ 'extensions' => ['.php', '.blade.php'], 'defaultLayout' => 'default', 'defaultTpl' => '', 'strictView' => true, 'strictTpl' => true, 'strictLayout' => true, 'sidePrefix' => 'auto', ]; $config = array_merge($defaultConfig, $config); // Apply fof.xml overrides $appConfig = $this->container->appConfig; $key = "views." . ucfirst($view->getName()) . ".config"; $fofXmlConfig = [ 'extensions' => $appConfig->get("$key.templateExtensions", $config['extensions']), 'strictView' => $appConfig->get("$key.templateStrictView", $config['strictView']), 'strictTpl' => $appConfig->get("$key.templateStrictTpl", $config['strictTpl']), 'strictLayout' => $appConfig->get("$key.templateStrictLayout", $config['strictLayout']), 'sidePrefix' => $appConfig->get("$key.templateLocation", $config['sidePrefix']), ]; $config = array_merge($config, $fofXmlConfig); // Create the new view template finder object return new ViewTemplateFinder($view, $config); } /** * @return string */ public function getSection() { return $this->section; } /** * @param string $section */ public function setSection($section) { $this->section = $section; } /** * Is scaffolding enabled? * * @return bool * * @deprecated 3.6.0 Always returns false */ public function isScaffolding() { return false; } /** * Set the scaffolding status * * @param bool $scaffolding * * @deprecated Removed since 3.6.0, does nothing */ public function setScaffolding($scaffolding): void { // Ignored } /** * Is saving the scaffolding result to disk enabled? * * @return bool * * @deprecated 3.6.0 Always returns false */ public function isSaveScaffolding() { return false; } /** * Set the status of saving the scaffolding result to disk. * * @param bool $saveScaffolding * * @deprecated 3.6.0 Does nothing */ public function setSaveScaffolding($saveScaffolding) { // Ignored } /** * Should we save controller to disk? * * @param bool $state * * @deprecated 3.6.0 Does nothing */ public function setSaveControllerScaffolding($state) { // Ignored } /** * Should we save controller scaffolding to disk? * * @return bool $state * * @deprecated 3.6.0 Always returns false */ public function isSaveControllerScaffolding() { return false; } /** * Should we save model to disk? * * @param bool $state * * @deprecated 3.6.0 Does nothing */ public function setSaveModelScaffolding($state) { // Ignored } /** * Should we save model scaffolding to disk? * * @return bool $state * * @deprecated 3.6.0 Always returns false */ public function isSaveModelScaffolding() { return false; } /** * Should we save view to disk? * * @param bool $state * * @deprecated 3.6.0 Does nothing */ public function setSaveViewScaffolding($state) { // Ignored } /** * Should we save view scaffolding to disk? * * @return bool $state * * @deprecated 3.6.0 Always returns false */ public function isSaveViewScaffolding() { return false; } /** * Creates a Controller object * * @param string $controllerClass The fully qualified class name for the Controller * @param array $config Optional MVC configuration values for the Controller object. * * @return Controller * * @throws RuntimeException If the $controllerClass does not exist */ protected function createController($controllerClass, array $config = []) { if (!class_exists($controllerClass)) { throw new ControllerNotFound($controllerClass); } return new $controllerClass($this->container, $config); } /** * Creates a Model object * * @param string $modelClass The fully qualified class name for the Model * @param array $config Optional MVC configuration values for the Model object. * * @return Model * * @throws RuntimeException If the $modelClass does not exist */ protected function createModel($modelClass, array $config = []) { if (!class_exists($modelClass)) { throw new ModelNotFound($modelClass); } return new $modelClass($this->container, $config); } /** * Creates a View object * * @param string $viewClass The fully qualified class name for the View * @param array $config Optional MVC configuration values for the View object. * * @return View * * @throws RuntimeException If the $viewClass does not exist */ protected function createView($viewClass, array $config = []) { if (!class_exists($viewClass)) { throw new ViewNotFound($viewClass); } return new $viewClass($this->container, $config); } /** * Creates a Toolbar object * * @param string $toolbarClass The fully qualified class name for the Toolbar * @param array $config The configuration values for the Toolbar object * * @return Toolbar * * @throws RuntimeException If the $toolbarClass does not exist */ protected function createToolbar($toolbarClass, array $config = []) { if (!class_exists($toolbarClass)) { throw new ToolbarNotFound($toolbarClass); } return new $toolbarClass($this->container, $config); } /** * Creates a Dispatcher object * * @param string $dispatcherClass The fully qualified class name for the Dispatcher * @param array $config The configuration values for the Dispatcher object * * @return Dispatcher * * @throws RuntimeException If the $dispatcherClass does not exist */ protected function createDispatcher($dispatcherClass, array $config = []) { if (!class_exists($dispatcherClass)) { throw new DispatcherNotFound($dispatcherClass); } return new $dispatcherClass($this->container, $config); } /** * Creates a TransparentAuthentication object * * @param string $authClass The fully qualified class name for the TransparentAuthentication * @param array $config The configuration values for the TransparentAuthentication object * * @return TransparentAuthentication * * @throws RuntimeException If the $authClass does not exist */ protected function createTransparentAuthentication($authClass, $config) { if (!class_exists($authClass)) { throw new TransparentAuthenticationNotFound($authClass); } return new $authClass($this->container, $config); } }