Ejemplo n.º 1
0
 public function dispatchRequest(ServerRequestInterface $request = null, ResponseInterface $response = null)
 {
     $request = $request ?: $this->request;
     $response = $response ?: $this->response;
     if (!$request || !$response) {
         throw new \RuntimeException("Failed to dispatch: Dispatcher was not handled through middleware " . "and is missing either the request or the response argument");
     }
     $nameSpace = trim($this->getOption('nameSpace', ''), '\\');
     $modules = $this->getOption('modules', []);
     $module = $request->getAttribute('module', $this->getOption('defaultModule', ''));
     $controller = $request->getAttribute('controller', $this->getOption('defaultController', 'index'));
     //Make sure the values are correctly formatted
     if (Inflector::canonicalize($module) !== $module || Inflector::canonicalize($controller) !== $controller) {
         return $response;
     }
     $controllerPattern = $this->getOption('controllerPattern', '%sController');
     $controllerInflection = $this->getOption('controllerInflection', [Inflector::class, 'camelize']);
     $controllerClassName = sprintf($controllerPattern, call_user_func($controllerInflection, $controller));
     if (!empty($module)) {
         if (!isset($modules[$module])) {
             return $response;
         }
         $controllerClassName = trim($modules[$module], '\\') . "\\{$controllerClassName}";
     }
     if (!empty($nameSpace)) {
         $controllerClassName = "{$nameSpace}\\{$controllerClassName}";
     }
     $loader = null;
     if (!class_exists($controllerClassName, false) && $this->getOption('loader.enabled', false)) {
         $loaderPath = $this->getOption('loader.path', getcwd() . '/controllers');
         $loaderPattern = $this->getOption('loader.pattern', null);
         $loader = new Loader($loaderPath, empty($nameSpace) ? null : $nameSpace, $loaderPattern);
         $loader->register();
     }
     if (!class_exists($controllerClassName) || !is_a($controllerClassName, Controller::class, true)) {
         return $response;
     }
     if ($loader) {
         $loader->unregister();
     }
     $this->app->prepend($controllerClassName);
     return $response;
 }
Ejemplo n.º 2
0
 public function testComposerLoader()
 {
     $loader = Loader::create(include __DIR__ . '/../vendor/autoload.php');
     $this->assertInstanceOf(Loader\ComposerLoader::class, $loader);
     $loader->add('Some\\Test\\', __DIR__ . '/library/Test');
     $loader->register();
     $this->assertTrue($loader->isRegistered());
     $obj = new OtherTestClass();
     $this->assertInstanceOf(OtherTestClass::class, $obj);
     $loader->unregister();
     $this->assertFalse($loader->isRegistered());
 }