2

GET 文字列の 1 つのパラメーターを変更して、ページを更新するにはどうすればよいですか?

私がこのページにいるとしましょう:

/my/page?foo=bar&asd=qwe

コントローラーには、次の変数があります。

$var = array('foo' => 'woof');

その変数を使用してこのページにリダイレクトするにはどうすればよいですか?:

/my/page?foo=woof&asd=qwe

または、私がこのページにいる場合:

/my/page

その変数を使用して、このページにアクセスするにはどうすればよいですか?:

/my/page?foo=woof
4

2 に答える 2

2

私がよく理解していれば、あなたがしたいことは次のとおりです。

public function myAction()
{
    $request = $this->getRequest();
    $params = $request->query->all();  // get the original GET parameters

    $var = array('foo' => 'woof');
    $newParams = array_replace($params, $var); // only replaces the 'foo' parameter, keeping the rest as is

    $url = '/my/page?'.http_build_query($newParams); // you can also use $this->generateUrl() if you use routing (which would be a good idea)

    return $this->redirect($url);
}
于 2012-06-11T15:52:38.690 に答える
0
public function onKernelRequest(GetResponseEvent $event) {
    $request = $event -> getRequest();
    $routes = $this -> router -> getRouteCollection();
    $routeName = $request -> get("_route");
    $params = $request -> query -> all();
    $route = $routes -> get($routeName);
    preg_match_all("/{(.+)}/", $route -> getPattern(), $routeParams);
    $routeParams = $routeParams[1];
    foreach ($routeParams as $key => $value) {
        $params[$value] = $request -> get($value);
    }

    if (array_key_exists("to_remove", $params)) {
        unset($params['to_remove']);
        $url = $this -> router -> generate($routeName, $params);
        $event -> setResponse(new RedirectResponse($url));
    }
}
于 2012-11-30T11:23:39.210 に答える