CakePHP3.6で Router::url(null, true) の挙動が変わった


ちょっとハマったので同じような方がいたときのために残しておきます。

変更点

  • クエリパラメーターも返すようになった。ただ、それだけです。

3.5系

  • 3.5.12で検証(controller / component内から実行)
// http://example.com/api/users?page=1 にアクセスした場合
$currentUrl = Router::url(null, true);
echo $currentUrl; // http://example.com/api/users が返ってくる

3.6系

  • 3.6.4で検証(controller / component内から実行)
// http://example.com/api/users?page=1 にアクセスした場合
$currentUrl = Router::url(null, true);
echo $currentUrl; // http://example.com/api/users?page=1 が返ってくる

ちょっと深掘り

  • このタイミングで変更になったようです。
  • 3.5系では $request->here が取得元で $hereこのように設定されており、クエリパラメーターが付与されていない。
  • 3.6系では $request->getRequestTarget() が取得元で getRequestTarget()このようなメソッドになっており、クエリパラメーターが付与されている。
  • すべてのパターンをみたわけではないので、間違っている箇所・説明不足な点がありましたら、ご指摘いただけると幸いです。