/** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param Closure $next * @return mixed */ public function handle($request, Closure $next) { if (!$request instanceof Request) { $request = Request::createFromBase($request); } $response = $next($request); if (!is_null($this->esi)) { $this->esi->addSurrogateControl($response); } return $response; }
protected function createRequest($method = 'GET') { $request = LaravelRequest::createFromBase(LaravelRequest::create('/', 'GET')); if ($method !== null) { $request->headers->set('Access-Control-Request-Method', $method); } return new Request($request); }
/** * Initialize the Laravel framework. * @param SymfonyRequest $request */ private function initialize($request = null) { // Store a reference to the database object // so the database connection can be reused during tests $this->oldDb = null; if ($this->app['db'] && $this->app['db']->connection()) { $this->oldDb = $this->app['db']; } // The module can login a user with the $I->amLoggedAs() method, // but this is not persisted between requests. Store a reference // to the logged in user to simulate this. $loggedInUser = null; if ($this->app['auth'] && $this->app['auth']->check()) { $loggedInUser = $this->app['auth']->user(); } // Load the application object $this->app = $this->kernel = $this->loadApplication(); // Set the request instance for the application if (is_null($request)) { $appConfig = (require $this->module->config['project_dir'] . 'config/app.php'); $request = SymfonyRequest::create($appConfig['url']); } $this->app->instance('request', Request::createFromBase($request)); $this->app->instance('middleware.disable', $this->module->config['disable_middleware']); // Reset the old database after the DatabaseServiceProvider ran. // This way other service providers that rely on the $app['db'] entry // have the correct instance available. if ($this->oldDb) { $this->app['events']->listen('Illuminate\\Database\\DatabaseServiceProvider', function () { $this->app->singleton('db', function () { return $this->oldDb; }); }); } $this->app->make('Illuminate\\Contracts\\Http\\Kernel')->bootstrap(); // If events should be disabled mock the event dispatcher instance if ($this->module->config['disable_events']) { $this->mockEventDispatcher(); } // Setup an event listener to listen for all events that are triggered $this->setupEventListener(); // If there was a user logged in restore this user. // Also reload the user object from the user provider to prevent stale user data. if ($loggedInUser) { $refreshed = $this->app['auth']->getProvider()->retrieveById($loggedInUser->getAuthIdentifier()); $this->app['auth']->setUser($refreshed ?: $loggedInUser); } $this->module->setApplication($this->app); }
/** * Initialize the Laravel framework. * @param SymfonyRequest $request */ private function initialize($request = null) { // Store a reference to the database object // so the database connection can be reused during tests $oldDb = null; if ($this->app['db'] && $this->app['db']->connection()) { $oldDb = $this->app['db']; } // The module can login a user with the $I->amLoggedAs() method, // but this is not persisted between requests. Store a reference // to the logged in user to simulate this. $loggedInUser = null; if ($this->app['auth'] && $this->app['auth']->check()) { $loggedInUser = $this->app['auth']->user(); } // Load the application object $this->app = $this->kernel = $this->loadApplication(); // Set the request instance for the application if (is_null($request)) { $appConfig = (require $this->module->config['project_dir'] . 'config/app.php'); $request = SymfonyRequest::create($appConfig['url']); } $this->app->instance('request', Request::createFromBase($request)); $this->app->instance('middleware.disable', $this->module->config['disable_middleware']); // Bootstrap the application $this->app->make('Illuminate\\Contracts\\Http\\Kernel')->bootstrap(); // Restore the old database object if available if ($oldDb) { $this->app['db'] = $oldDb; Model::setConnectionResolver($this->app['db']); } // If there was a user logged in restore this user. // Also reload the user object from the user provider to prevent stale user data. if ($loggedInUser) { $refreshed = $this->app['auth']->getProvider()->retrieveById($loggedInUser->getAuthIdentifier()); $this->app['auth']->setUser($refreshed ?: $loggedInUser); } $this->module->setApplication($this->app); }
/** * Initialize the Laravel framework. */ private function initialize() { // Store a reference to the database object // so the database connection can be reused during tests $oldDb = null; if ($this->app['db'] && $this->app['db']->connection()) { $oldDb = $this->app['db']; } // The module can login a user with the $I->amLoggedAs() method, // but this is not persisted between requests. Store a reference // to the logged in user to simulate this. $loggedInUser = null; if ($this->app['auth'] && $this->app['auth']->check()) { $loggedInUser = $this->app['auth']->user(); } $this->app = $this->kernel = $this->loadApplication(); $this->app->make('Illuminate\\Contracts\\Http\\Kernel')->bootstrap(); // Set the base url for the Request object $url = $this->app['config']->get('app.url', 'http://localhost'); $this->app->instance('request', Request::createFromBase(SymfonyRequest::create($url))); if ($oldDb) { $this->app['db'] = $oldDb; Model::setConnectionResolver($this->app['db']); } // If there was a user logged in restore this user. // Also reload the user object from the user provider to prevent stale user data. if ($loggedInUser) { $refreshed = $this->app['auth']->getProvider()->retrieveById($loggedInUser->getAuthIdentifier()); $this->app['auth']->setUser($refreshed ?: $loggedInUser); } $this->module->setApplication($this->app); }
protected function createRequest($origin = null) { $request = LaravelRequest::createFromBase(LaravelRequest::create('/', 'GET')); if ($origin !== null) { $request->headers->set('Origin', $origin); } return new Request($request); }
/** * @return \Illuminate\Http\Response */ public function run() { $request = Request::createFromBase(Request::createFromGlobals()); return $this->handle($request); }
protected function createRequest($headers = ['X-Test']) { $request = LaravelRequest::createFromBase(LaravelRequest::create('/', 'GET')); if ($headers !== null) { $request->headers->set('Access-Control-Request-Headers', implode(', ', $headers)); } return new Request($request); }
/** * Handle a request. * * @param SymfonyRequest $request * @param int $type * @param bool $catch * @return Response */ public function handle(SymfonyRequest $request, $type = self::MASTER_REQUEST, $catch = true) { $this->app['request'] = $request = Request::createFromBase($request); $response = $this->app->handle($request); $method = new \ReflectionMethod(get_class($this->app), 'callTerminableMiddleware'); $method->setAccessible(true); $method->invoke($this->app, $response); return $response; }
/** * Return a UrlGenerator object * * @return \Illuminate\Routing\UrlGenerator */ public function url() { $routes = new \Illuminate\Routing\RouteCollection(); $context = \Illuminate\Http\Request::createFromBase(\Illuminate\Http\Request::capture()); return new \Illuminate\Routing\UrlGenerator($routes, $context); }
/** * Terminates a request/response cycle. * * @param SyfmonyRequest $request A Request instance * @param Response $response A Response instance * * @api */ public function terminate(SyfmonyRequest $request, Response $response) { $this->httpKernel->terminate(Request::createFromBase($request), $response); }
/** * Build an \Illuminate\Http\Request object * * @param string $verb * @param \Ratchet\ConnectionInterface $connection * @param \Rathcet\Wamp\Topic $topic * @param array $data * @return \Illuminate\Http\Request */ protected function buildRequest($verb, Connection $connection, $topic, $data = [], $params = null) { $uri = ['protocol' => 'ws://', 'host' => $connection->WebSocket->request->getHost(), 'port' => ':' . config('twostream.websocket.port'), 'path' => '/' . trim($topic->getId(), '/') . (isset($params) ? '/' . implode('/', $params) : '')]; $cookies = $connection->WebSocket->request->getCookies(); array_forget($cookies, config('session.cookie')); // Make sure the normal Session Facade does not contain the client's Session. return Request::createFromBase(SymfonyRequest::create(implode($uri), strtoupper($verb), ['data' => $data], $cookies, [], [], null)); }
protected function makeJsonRequest($request, $content) { $newRequest = SymphonyRequest::create($request->getUri(), $request->getMethod(), [], $request->cookie(), [], $this->transformHeadersToServerVars($request->headers->all()), $content); return Request::createFromBase($newRequest); }
private function dealWithRequest($request) { $get = isset($request->get) ? $request->get : array(); $post = isset($request->post) ? $request->post : array(); $cookie = isset($request->cookie) ? $request->cookie : array(); $server = isset($request->server) ? $request->server : array(); $header = isset($request->header) ? $request->header : array(); // #4 swoole 1.7.19 will no longer do urlencode on cookies by denghongcai if (strnatcasecmp(SWOOLE_VERSION, '1.7.19') < 0) { // #2 laravel结合swoole每次刷新session都会变的问题 by cong8341 // 注:由于swoole对cookie中的特殊字符(=等)做了urlencode,导致laravel的encrypter // 在下次请求时接受到的payload与上一个请求响应时发出的不一致,最终导致每次请求 // 都解出不一样的laravel_session foreach ($cookie as $key => $value) { $cookie[$key] = urldecode($value); } } // #5 增强与Laravel的兼容,处理特殊请求体 by denghongcai // swoole中header并没有包含于$request->server中,需要合并 foreach ($header as $key => $value) { $header['http_' . $key] = $value; unset($header[$key]); } $server = array_merge($server, $header); // 在swoole环境下$_SERVER的所有key都为小写,需要把它们转化为大写 foreach ($server as $key => $value) { $server[strtoupper($key)] = $value; unset($server[$key]); } // #5 增强与Laravel的兼容,处理特殊请求体 by denghongcai // 对于Content-Type为非application/x-www-form-urlencoded的请求体需要给 // SymfonyRequest传入原始的Body $content = $request->rawContent(); $content = empty($content) ? null : $content; // 创建illuminate_request $illuminate_request = IlluminateRequest::createFromBase(new SymfonyRequest($get, $post, array(), $cookie, array(), $server, $content)); return $illuminate_request; }
/** * Call the given URI and return the Response. * * @param string $method * @param string $uri * @param array $parameters * @param array $cookies * @param array $files * @param array $server * @param string $content * @return \Illuminate\Http\Response */ public function call($method, $uri, $parameters = [], $cookies = [], $files = [], $server = [], $content = null) { $kernel = $this->app->make(HttpKernel::class); $files = array_merge($files, $this->extractFilesFromDataArray($parameters)); $symfonyRequest = SymfonyRequest::create($this->prepareUrlForRequest($uri), $method, $parameters, $cookies, $files, array_replace($this->serverVariables, $server), $content); $response = $kernel->handle($request = Request::createFromBase($symfonyRequest)); $kernel->terminate($request, $response); return $this->createTestResponse($response); }
/** * Initialize the Laravel framework. * * @param SymfonyRequest $request */ private function initialize($request = null) { // Store a reference to the database object // so the database connection can be reused during tests $this->oldDb = null; if ($this->app['db'] && $this->app['db']->connection()) { $this->oldDb = $this->app['db']; } $this->app = $this->kernel = $this->loadApplication(); // Set the request instance for the application, if (is_null($request)) { $appConfig = (require $this->module->config['project_dir'] . 'config/app.php'); $request = SymfonyRequest::create($appConfig['url']); } $this->app->instance('request', Request::createFromBase($request)); // Reset the old database after the DatabaseServiceProvider ran. // This way other service providers that rely on the $app['db'] entry // have the correct instance available. if ($this->oldDb) { $this->app['events']->listen('Illuminate\\Database\\DatabaseServiceProvider', function () { $this->app->singleton('db', function () { return $this->oldDb; }); }); } $this->app->make('Illuminate\\Contracts\\Http\\Kernel')->bootstrap(); // Record all triggered events by adding a wildcard event listener $this->app['events']->listen('*', function () { $this->triggeredEvents[] = $this->normalizeEvent($this->app['events']->firing()); }); if ($this->module->config['disable_middleware'] || $this->middlewareDisabled) { $this->app->instance('middleware.disable', true); } if ($this->module->config['disable_events'] || $this->eventsDisabled) { $this->mockEventDispatcher(); } $this->module->setApplication($this->app); }
/** * Create an Illuminate request from a Symfony instance. * * @param SymfonyRequest $request request instance * @return \Xpressengine\Http\Request */ public static function createFromBase(SymfonyRequest $request) { $request = parent::createFromBase($request); $request->originInputSource = new ParameterBag($request->all()); return $request; }
/** * Create an Illuminate request from a Symfony instance. * * @param \Symfony\Component\HttpFoundation\Request $request * @return \Illuminate\Http\Request * @static */ public static function createFromBase($request) { return \Illuminate\Http\Request::createFromBase($request); }
private function performLocalRequest(Request $parentRequest = null, $url, $method, $data, &$statusCode = null) { $urlInfo = parse_url($url); if (array_key_exists('query', $urlInfo) == true && mb_strlen($urlInfo['query']) > 0) { mb_parse_str($urlInfo['query'], $_GET); } // create the request object $cookies = $parentRequest ? $parentRequest->cookies->all() : []; $server = $parentRequest ? $parentRequest->server->all() : []; $request = Request::createFromBase(SymfonyRequest::create($url, $method, [], $cookies, [], $server, json_encode($data))); $request->headers->set('Content-Type', 'application/json'); if ($parentRequest !== null) { $locale = $parentRequest->getLocale(); $request->setSession($parentRequest->getSession()); $request->setLocale($locale); $request->headers->set('Accept-Language', [$locale]); } // execute the request // TODO: handle errors gracefully $kernel = $GLOBALS['kernel']; //$this->app->make(\Illuminate\Contracts\Http\Kernel::class); $response = $kernel->handle($request, HttpKernelInterface::SUB_REQUEST); $statusCode = $response->getStatusCode(); $content = $response->getContent(); return $content; }
/** * Call the given URI and return the Response. * * @param string $method * @param string $uri * @param array $parameters * @param array $cookies * @param array $files * @param array $server * @param string $content * @return \Illuminate\Http\Response */ public function call($method, $uri, $parameters = [], $cookies = [], $files = [], $server = [], $content = null) { $kernel = $this->app->make('Illuminate\\Contracts\\Http\\Kernel'); $this->currentUri = $this->prepareUrlForRequest($uri); $this->resetPageContext(); $symfonyRequest = SymfonyRequest::create($this->currentUri, $method, $parameters, $cookies, $this->filterFiles($files), array_replace($this->serverVariables, $server), $content); $request = Request::createFromBase($symfonyRequest); $response = $kernel->handle($request); $kernel->terminate($request, $response); return $this->response = $response; }
/** * {@inheritdoc} */ public function handle(SymfonyRequest $request, $type = self::MASTER_REQUEST, $catch = true) { return $this['Illuminate\\Contracts\\Http\\Kernel']->handle(Request::createFromBase($request)); }
/** * Get the response for a given request. * * @param \Symfony\Component\HttpFoundation\Request $request * @param int $type * @param bool $catch * @return \Illuminate\Http\Response */ public function handle(SymfonyRequest $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true) { return $this->dispatch(Request::createFromBase($request)); }
/** * Handle the given request and get the response. * * Provides compatibility with BrowserKit functional testing. * * @implements HttpKernelInterface::handle * * @param \Symfony\Component\HttpFoundation\Request $request * @param int $type * @param bool $catch * @return \Symfony\Component\HttpFoundation\Response * * @throws \Exception */ public function handle(SymfonyRequest $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true) { try { $this->refreshRequest($request = Request::createFromBase($request)); $this->boot(); return $this->dispatch($request); } catch (\Exception $e) { if ($this->runningUnitTests()) { throw $e; } return $this['exception']->handleException($e); } }
protected function createRequest($host = 'localhost') { $request = LaravelRequest::createFromBase(LaravelRequest::create('/', 'GET', [], [], [], ['HTTP_HOST' => $host])); return new Request($request); }
/** * Handle a request. * * @param DomRequest $request * @param int $type * @param bool $catch * @return Response */ public function handle(DomRequest $request, $type = self::MASTER_REQUEST, $catch = true) { $request = Request::createFromBase($request); $request->enableHttpMethodParameterOverride(); $this->app->bind('request', $request); return $this->httpKernel->handle($request); }
public function onRequest($request, $response) { // global vars used by: Symfony\Component\HttpFoundation\Request::createFromGlobals() // this static method is alse used by Illuminate\Auth\Guard $this->setGlobal($request); // according to : Illuminate\Http\Request::capture // static::enableHttpMethodParameterOverride(); // this line moved to $this->bootstrap() : $laravel_request = \Illuminate\Http\Request::createFromBase(\Symfony\Component\HttpFoundation\Request::createFromGlobals()); // see: Illuminate\Foundation\Http\Kernel::handle($request) $laravel_response = $this->kernel->handle($laravel_request); // sometimes there are errors saying 'http_onReceive: connection[...] is closed' and this type of error make worker restart if (!$this->swoole_http_server->exist($response->fd)) { return; } foreach ($laravel_response->headers->allPreserveCase() as $name => $values) { foreach ($values as $value) { $response->header($name, $value); } } foreach ($laravel_response->headers->getCookies() as $cookie) { $response->cookie($cookie->getName(), $cookie->getValue(), $cookie->getExpiresTime(), $cookie->getPath(), $cookie->getDomain(), $cookie->isSecure(), $cookie->isHttpOnly()); } // I think " $l_response->send()" is enough // $response->status($l_response->getStatusCode()); // gzip use nginx // $response->gzip(1); ob_start(); // $laravel_response->send() contains setting header and cookie ,and $response->header and $response->cookie do same jobs. // They are all necessary , according by my test $laravel_response->send(); $response->end(ob_get_clean()); $this->kernel->terminate($laravel_request, $laravel_response); $this->app->restoreAfterRequest(); }
/** * Given a request object, find the matching route * * @param Request $request * @return \Illuminate\Routing\Route */ public function matchRequest(SymfonyRequest $request) { $laravelRequest = LaravelRequest::createFromBase($request); $route = $this->findRoute($laravelRequest); $route->setParameter('_module', $this->moduleName); return $route; }
public function onRequest($request, $response) { //[备注]由于laravel_kernel接受illuminate_request并返回illuminate_response,所以该方法针对swoole的请求和响应进行兼容处理 //兼容Swoole的请求对象 $get = isset($request->get) ? $request->get : array(); $post = isset($request->post) ? $request->post : array(); $cookie = isset($request->cookie) ? $request->cookie : array(); $server = isset($request->server) ? $request->server : array(); foreach ($server as $key => $value) { $server[strtoupper($key)] = $value; unset($server[$key]); } //创建illuminate_request $illuminate_request = IlluminateRequest::createFromBase(new SymfonyRequest($get, $post, array(), $cookie, array(), $server)); //把illuminate_request传入laravel_kernel后,取回illuminate_response $illuminate_response = $this->laravel_kernel->handle($illuminate_request); //兼容Swoole的响应对象 // status $response->status($illuminate_response->getStatusCode()); // headers foreach ($illuminate_response->headers->allPreserveCase() as $name => $values) { foreach ($values as $value) { $response->header($name, $value); } } // cookies foreach ($illuminate_response->headers->getCookies() as $cookie) { $response->cookie($cookie->getName(), $cookie->getValue(), $cookie->getExpiresTime(), $cookie->getPath(), $cookie->getDomain(), $cookie->isSecure(), $cookie->isHttpOnly()); } // content $content = $illuminate_response->getContent(); // send content & close $response->end($content); //结束请求生命周期(依次调用内核中所有middleware的teminate) $this->laravel_kernel->terminate($illuminate_request, $illuminate_response); }