Sets the request [[queryString]] parameters.
public setQueryParams ( array $values ) | ||
$values | array | the request query parameters (name-value pairs) |
/** * Parses the URL and sets the language accordingly * @param \yii\web\Request $request * @return array|bool */ public function parseRequest($request) { if ($this->enablePrettyUrl) { $pathInfo = $request->getPathInfo(); $language = explode('/', $pathInfo)[0]; $locale = ArrayHelper::getValue($this->aliases, $language, $language); if (in_array($language, $this->languages)) { $request->setPathInfo(substr_replace($pathInfo, '', 0, strlen($language) + 1)); Yii::$app->language = $locale; static::$currentLanguage = $language; } } else { $params = $request->getQueryParams(); $route = isset($params[$this->routeParam]) ? $params[$this->routeParam] : ''; if (is_array($route)) { $route = ''; } $language = explode('/', $route)[0]; $locale = ArrayHelper::getValue($this->aliases, $language, $language); if (in_array($language, $this->languages)) { $route = substr_replace($route, '', 0, strlen($language) + 1); $params[$this->routeParam] = $route; $request->setQueryParams($params); Yii::$app->language = $locale; static::$currentLanguage = $language; } } return parent::parseRequest($request); }
public function testResolve() { $this->mockWebApplication([ 'components' => [ 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'cache' => null, 'rules' => [ 'posts' => 'post/list', 'post/<id>' => 'post/view', ], ] ] ]); $request = new Request(); $request->pathInfo = 'posts'; $_GET['page'] = 1; $result = $request->resolve(); $this->assertEquals(['post/list', ['page' => 1]], $result); $this->assertEquals($_GET, ['page' => 1]); $request->setQueryParams(['page' => 5]); $result = $request->resolve(); $this->assertEquals(['post/list', ['page' => 5]], $result); $this->assertEquals($_GET, ['page' => 1]); $request->setQueryParams(['custom-page' => 5]); $result = $request->resolve(); $this->assertEquals(['post/list', ['custom-page' => 5]], $result); $this->assertEquals($_GET, ['page' => 1]); unset($_GET['page']); $request = new Request(); $request->pathInfo = 'post/21'; $this->assertEquals($_GET, []); $result = $request->resolve(); $this->assertEquals(['post/view', ['id' => 21]], $result); $this->assertEquals($_GET, ['id' => 21]); $_GET['id'] = 42; $result = $request->resolve(); $this->assertEquals(['post/view', ['id' => 21]], $result); $this->assertEquals($_GET, ['id' => 21]); $_GET['id'] = 63; $request->setQueryParams(['token' => 'secret']); $result = $request->resolve(); $this->assertEquals(['post/view', ['id' => 21, 'token' => 'secret']], $result); $this->assertEquals($_GET, ['id' => 63]); }