public function willRespondToRequest($controllerClass, Request $request) { if (!class_exists($controllerClass)) { throw new InvalidArgumentException('existing class name', $controllerClass); } if (!isset($controllerClass::$_ajaxAccess) || !is_array($controllerClass::$_ajaxAccess)) { return true; } $method = strtolower($request->getMethod()); $accessControl = array_merge(array('get' => self::BOTH, 'post' => self::BOTH, 'put' => self::BOTH, 'delete' => self::BOTH), $controllerClass::$_ajaxAccess); if ($accessControl[$method] === self::NORMAL_ONLY && $request->isXmlHttpRequest() || $accessControl[$method] === self::AJAX_ONLY && !$request->isXmlHttpRequest()) { return false; } return true; }
/** * Single entry point for most of use cases in which the passed application will be bootstrapped, * configured and run in appropriate mode. * * Most of applications should use this method as it controls the whole application flow from start to the end * of the process in a most standard way. * * It returns whatever result of running the application. * * @param AbstractApplication $application Application to be ran. * @param string $env [optional] Environment in which the application should be ran. Default: `dev`. * @param boolean $debug [optional] Should application be ran in debug mode? Default: `true`. * @param int $mode [optional] Mode in which the application should be ran. * This is one of the `Framework::MODE_*` constants. Default: `Framework::MODE_WEB`. * @return mixed * * @codeCoverageIgnore */ public static function run(AbstractApplication $application, $env = 'dev', $debug = true, $mode = self::MODE_WEB) { $framework = new static(); // console and command modes should attempt to read env and debug from argv if ($mode === self::MODE_CONSOLE || $mode === self::MODE_COMMAND) { list($env, $debug) = static::getEnvDebugFromArgv($_SERVER['argv'], $env, $debug); } $framework->warmup($application, $env, $debug); switch ($mode) { case self::MODE_CONSOLE: $result = $framework->runConsole($application); break; case self::MODE_COMMAND: $input = new ArgvInput(); $result = $framework->runCommand($application, $input); break; case self::MODE_TEST: $result = $framework->runTest($application); break; case self::MODE_WEB: default: $request = Request::createFromGlobals(); $result = $framework->runWebRequest($application, $request); } return $result; }
/** * Tries to find a route for the given request. * * @param Request $request * @return array|bool Array of information about a found route or false if no route found. */ public function getRouteForRequest(Request $request) { return $this->getRouteForUrl($request->getPathInfo(), $request->getMethod()); }
/** * @covers ::sendResponse */ public function testSendingResponse() { $willSendResponseCalled = false; $this->application->getContainer()->get('event_manager')->subscribe(WillSendResponse::getName(), function () use(&$willSendResponseCalled) { $willSendResponseCalled = true; }); $request = Request::create('/'); $response = new Response('This is some valid response.'); ob_start(); $this->application->sendResponse($response, $request); $content = ob_get_contents(); ob_end_clean(); $this->assertEquals('This is some valid response.', $content); $this->assertTrue($willSendResponseCalled); }
/** * @covers ::getRouteForRequest * @covers ::getRoute */ public function testGettingRouteForRequest() { $router = $this->provideRouter(); $indexRoute = $router->addRoute('test.index', TestController::class, null, '/test/'); $listRoute = $router->addRoute('test.list', TestController::class, null, '/test/{page:int}/{limit:int}?'); $itemRoute = $router->addRoute('test.item', TestController::class, null, '/test/{id:int}/{slug}.html'); $itemAdminRoute = $router->addRoute('test.item_admin', TestController::class, null, '/test/admin/{id:int}/', array('get' => 'index', 'put' => false, 'post' => 'index', 'delete' => 'index')); $this->assertFalse($router->getRouteForRequest(Request::create('/lorem/ipsum/'))); $this->assertSame($itemRoute, $router->getRouteForRequest(Request::create('/test/123/lipsum.html'))); $this->assertSame($listRoute, $router->getRouteForRequest(Request::create('/test/2/'))); $this->assertSame($listRoute, $router->getRouteForRequest(Request::create('/test/2/50', 'POST'))); $this->assertSame($indexRoute, $router->getRouteForRequest(Request::create('/test/'))); $this->assertSame($itemAdminRoute, $router->getRouteForRequest(Request::create('/test/admin/12/'))); $this->assertFalse($router->getRouteForRequest(Request::create('/test/admin/12/', 'PUT'))); }
public function index($id, Request $request) { return '#' . $id . ': Injected Request with URL: ' . $request->getPathInfo(); }
/** * @covers \Splot\Framework\Events\WillSendResponse::__construct * @covers \Splot\Framework\Events\WillSendResponse::getRequest * @covers \Splot\Framework\Events\WillSendResponse::getResponse */ public function testWillSendResponse() { $request = Request::create('/test/'); $response = new Response('some response'); $event = new Events\WillSendResponse($response, $request); $this->assertSame($request, $event->getRequest()); $this->assertSame($response, $event->getResponse()); }