public function testDispatch($path) { $request = \Owl\Http\Request::factory(['uri' => $path, 'method' => 'GET']); if ($router = $this->getDelegateRouter($request)) { return $router->dispatch($request); } return $this->dispatch($request); }
public function testRequestURI() { $uri = '/foobar.json?foo=bar'; $request = \Owl\Http\Request::factory(['uri' => $uri]); $this->assertEquals($uri, $request->getRequestURI()); $this->assertEquals('/foobar.json', $request->getRequestPath()); $this->assertEquals('json', $request->getExtension()); }
/** * @expectedException \Owl\Http\Exception * @expectedExceptionCode 501 */ public function test501() { $app = new \Owl\Application(); $app->setExceptionHandler(function ($exception) { throw $exception; }); $request = \Owl\Http\Request::factory(['method' => 'FOO']); $response = new \Owl\Http\Response(); $app->execute($request, $response); }
public function testBindIpCookieContext() { $config = ['request' => \Owl\Http\Request::factory(['ip' => '192.168.1.1']), 'response' => new \Tests\Mock\Http\Response(), 'token' => 'test', 'sign_salt' => 'fdajkfldsjfldsf', 'bind_ip' => true]; $handler = new \Owl\Context\Cookie($config); $handler->set('test', 'abc'); $handler = new \Owl\Context\Cookie(array_merge($config, ['request' => \Owl\Http\Request::factory(['cookies' => $handler->getConfig('response')->getCookies(), 'ip' => '192.168.1.3']), 'response' => new \Tests\Mock\Http\Response()])); $this->assertEquals($handler->get('test'), 'abc', '同子网IP取值'); $handler = new \Owl\Context\Cookie(array_merge($config, ['request' => \Owl\Http\Request::factory(['cookies' => $handler->getConfig('response')->getCookies(), 'ip' => '192.168.2.1']), 'response' => new \Owl\Http\Response()])); $this->assertNull($handler->get('test'), '不同子网IP取值'); }
public function reset() { parent::reset(); $request = $this->request; $this->get = isset($request->get) ? $request->get : []; $this->post = isset($request->post) ? $request->post : []; $this->cookies = isset($request->cookie) ? $request->cookie : []; $this->server = isset($request->server) ? array_change_key_case($request->server, CASE_UPPER) : []; $this->headers = isset($request->header) ? $request->header : []; $_GET = $this->get; $_POST = $this->post; $_COOKIE = $this->cookies; $_SERVER = $this->server; }
public function testRequestURI() { $uri = '/foobar.json?foo=bar'; $request = \Owl\Http\Request::factory(['uri' => $uri]); $this->assertEquals($uri, $request->getRequestTarget()); $this->assertEquals('/foobar.json', $request->getUri()->getPath()); $this->assertEquals('json', $request->getUri()->getExtension()); $request = \Owl\Http\Request::factory(['uri' => '/', '_SERVER' => ['SERVER_NAME' => 'test.example.com']]); $uri = $request->getUri(); $this->assertEquals('test.example.com', $uri->getHost()); $request = \Owl\Http\Request::factory(['uri' => '/', 'headers' => ['host' => 'www.example.com:88'], '_SERVER' => ['SERVER_NAME' => 'test.example.com']]); $uri = $request->getUri(); $this->assertEquals('www.example.com', $uri->getHost()); $this->assertEquals(88, $uri->getPort()); }
protected function execute(array $options) { $path = isset($options['uri']) ? parse_url($options['uri'], PHP_URL_PATH) : '/'; $cookies = \Tests\Mock\Cookie::getInstance()->get($path); if (isset($options['cookies'])) { $options['cookies'] = array_merge($cookies, $options['cookies']); } else { $options['cookies'] = $cookies; } $request = \Owl\Http\Request::factory($options); $response = new \Tests\Mock\Response(); $app = __get_fpm_app(); $app->execute($request, $response); return $response; }
public function testOwnRequest() { $request = new Request([], [], [], [], [], []); $this->assertEquals('/', $request->getUri()); // By default it's / $this->assertEquals(Request::GET, $request->getMethod()); $request = new Request(['param1' => 5], ['post1' => 5, 'post2' => "test string"], ['REQUEST_URI' => '/testuri'], [], [], []); $this->assertEquals('/testuri', $request->getUri()); $this->assertEquals(Request::GET, $request->getMethod()); $this->assertSame(5, $request->getParam('param1')); $this->assertSame(5, $request->getPost('post1')); $this->assertSame("test string", $request->getPost('post2')); }
public function __construct($swoole_request) { $this->swoole_request = $swoole_request; $get = isset($swoole_request->get) ? $swoole_request->get : []; $post = isset($swoole_request->post) ? $swoole_request->post : []; $cookies = isset($swoole_request->cookie) ? $swoole_request->cookie : []; $server = isset($swoole_request->server) ? array_change_key_case($swoole_request->server, CASE_UPPER) : []; $headers = isset($swoole_request->header) ? array_change_key_case($swoole_request->header, CASE_LOWER) : []; $files = isset($swoole_request->files) ? $swoole_request->files : []; foreach ($headers as $key => $value) { $key = 'HTTP_' . strtoupper(str_replace('-', '_', $key)); $server[$key] = $value; } $_GET = $get; $_POST = $post; $_COOKIE = $cookies; $_SERVER = $server; $_FILES = $files; parent::__construct($get, $post, $server, $cookies, $files); }
public function testDispatchEvents() { $dispatchAfterInitialize = false; $dispatchAfterAction = false; $dispatchBeforeExecuteRoute = false; $dispatchAfterExecuteRoute = false; $appAfterHandle = false; $eventManager = new \Owl\Event\Manager(); $eventManager->listen('dispatch:afterInitialize', function ($app) use(&$dispatchAfterInitialize) { $dispatchAfterInitialize = true; }); $eventManager->listen('dispatch:afterAction', function ($app) use(&$dispatchAfterAction) { $dispatchAfterAction = true; }); $eventManager->listen('dispatch:beforeExecuteRoute', function ($app) use(&$dispatchBeforeExecuteRoute) { $dispatchBeforeExecuteRoute = true; }); $eventManager->listen('dispatch:afterExecuteRoute', function ($app) use(&$dispatchAfterExecuteRoute) { $dispatchAfterExecuteRoute = true; }); $eventManager->listen('app:afterHandle', function ($app) use(&$appAfterHandle) { $appAfterHandle = true; }); $this->assertFalse($dispatchAfterInitialize); $this->assertFalse($dispatchAfterAction); $this->assertFalse($dispatchBeforeExecuteRoute); $this->assertFalse($dispatchAfterExecuteRoute); $this->assertFalse($appAfterHandle); $application = $this->createSmallApp($eventManager); $response = $application->handle(Request::createFromGlobals(), new \Owl\Http\Response\Json()); $this->assertInstanceOf('Owl\\Http\\ResponseInterface', $response); $this->assertSame(200, $response->getCode()); $this->assertNotFalse($dispatchBeforeExecuteRoute); $this->assertNotFalse($dispatchAfterExecuteRoute); $this->assertNotFalse($dispatchAfterInitialize); $this->assertNotFalse($dispatchAfterAction); $this->assertNotFalse($appAfterHandle); }
<?php $serviceManager = new \Owl\Service\Manager(); $router = new \Owl\Router\Router(); $router->add('/', ['action' => '/']); $router->add('/user/{id:int}/', ['action' => 'view']); $router->add('/users', ['action' => 'users']); $serviceManager->set('router', $router); $application = new \Owl\Application($serviceManager); $application->handle(\Owl\Http\Request::createFromGlobals(), new \Owl\Http\Response());
<?php /** * @author Patsura Dmitry http://github.com/ovr <*****@*****.**> */ use Owl\Application; use Owl\Http\Request; use Owl\Router\Route; use Owl\Router\Router; include_once __DIR__ . '/../vendor/autoload.php'; $serviceManager = new Owl\Service\Manager(); $router = new Router(); /** * Frontend */ $router->add('/', ['module' => 'Frontend', 'controller' => 'Index', 'action' => 'index']); /** * Api module - REST API */ $router->add('/api', ['module' => 'Api', 'controller' => 'Index', 'action' => 'index']); $router->add('/api/users', ['module' => 'Api', 'controller' => 'User', 'action' => 'list']); $router->add('/api/users/:id', ['module' => 'Api', 'controller' => 'User', 'action' => 'index']); $router->add('/api/users/:id', ['module' => 'Api', 'controller' => 'User', 'action' => 'create'], Route::POST); $router->add('/api/users/:id', ['module' => 'Api', 'controller' => 'User', 'action' => 'delete'], Route::DELETE); $serviceManager->set('router', $router); $application = new Application($serviceManager); $response = $application->handle(Request::createFromGlobals()); $response->send();
/** * 响应请求,依次执行添加的中间件逻辑. * * @param \Owl\Http\Request $request * @param \Owl\Http\Response $response */ public function execute(\Owl\Http\Request $request, \Owl\Http\Response $response) { $exception_handler = $this->getExceptionHandler(); $method = $request->getMethod(); try { if (!in_array($method, ['HEAD', 'OPTIONS', 'GET', 'POST', 'PUT', 'DELETE', 'PATCH'])) { throw \Owl\Http\Exception::factory(501); } $this->middleware->execute([$request, $response]); } catch (\Exception $exception) { call_user_func($exception_handler, $exception, $request, $response); } catch (\Throwable $error) { call_user_func($exception_handler, $error, $request, $response); } if (!TEST) { $response->end(); } if (function_exists('fastcgi_finish_request')) { fastcgi_finish_request(); } }
/** * 获得请求路径,去掉了base_path后的内容 * * @param Owl\Http\Request $request * @return string */ protected function getRequestPath(\Owl\Http\Request $request) { $path = $this->normalizePath($request->getRequestPath()); return $this->trimBasePath($path); }
<?php /** * @author Patsura Dmitry http://github.com/ovr <*****@*****.**> */ use Owl\Application; use Owl\Http\Request; use Owl\Router\Route; use Owl\Router\Router; error_reporting(-1); ini_set('display_errors', 1); include_once __DIR__ . '/../vendor/autoload.php'; include_once __DIR__ . '/../app/Application.php'; $eventManager = new \Owl\Event\Manager(); $profiler = new Owl\Debug\Profiler(); $profiler->listen($eventManager); $application = new \RestApp\Application(new Owl\Service\Manager(), $eventManager); $response = $application->bootstrap()->handle(Request::createFromGlobals(), new \Owl\Http\Response\Json()); $response = $profiler->setContent($response); $response->send();
public function testSuccessConstructPass() { $controller = new Controller(Request::createFromGlobals(), new \Owl\Http\Response\Json(), new \Owl\Service\Manager()); $this->assertInstanceOf('Owl\\Http\\RequestInterface', $controller->getRequest()); }