【CakePHP】ViewからControllerにPOST以外で値を送る方法




こんにちは。ControllerからViewへ値を送るには$this->set()を使えば良いのですが、その逆はどうすればいいんだろうと悩んでいました。

目次

やりたいこと

View内のインプットボックスに入れた数字を、ボタンクリックによってControllerに送信する。ただし、POSTは使わない。Viewの上で入力した内容をControllerで使うには、Formを使う方法もありますが、今回はForm以外でViewからControllerに値を送る方法を解説します。

実装する

View側(myFunc.ctp)

<a href="Myapp/myFunc/○○/△△">
<button class="button">ボタン</button>
</a>

結論から言えば、ボタンに対するaタグのhrefで変数を送ります。上記のコードでは、

  • クラス名:Myapp
  • アクション名:myFunc
  • ○○:送りたい変数1
  • △△:送りたい変数2

となっています。サンプルではhtmlに直接書き込んでいますが、JavaScriptでインプットボックスの数字を読み取ってリンク先を指定することもできます。

Controller内のアクションを実行するには、上記のようにURLを叩けばいいのですが、アクション名の後ろに「/(スラッシュ)」で区切ることで値をいくつも送ることができます・

Controller側(MyappController.php)

続いてController側での受け取り方です。

private function() {
  $params = this->request->getAttribute('params');
}

上記の$this->request->getAttribute(‘params’)によって配列で取り出すことができます。