本記事では、CakePHP4の他のアクションへの転送方法を記載しています。
アクションを切り替えたい場合には、いくつかの方法があります。
中でも代表的なものは、redirectによる転送方法と言えると思います。
redirectはお手軽に利用でき、大変に便利です。
しかしながら、redirectの場合には、
・URLが転送先のURLに書き換えられてしまう
・パラメータをPOSTする場合には、作りこみが必要
など、制限もあります。
これを解決する方法として、setAction は大変役に立つでしょう。
setAction
同じコントローラー内で、異なるアクションにフォワードするには、下記の実装になります。
1 |
$this->setAction('アクション名'); |
Cake\Controller\Controller::setAction($action, $args...)
もし、現在のアクションを 同じ コントローラーの異なるアクションにフォワードする必要があれば、 リクエストオブジェクトを更新し、描画されるビューテンプレートを変更し、そして 指定のアクションに実行をフォワードするために Controller::setAction() を使用します。※CakePHP公式サイトのCookbookより抜粋
非常にシンプルに実現できます。
同一コントローラー内という制限がありますが、
redirectしたくない場合などで、多様出来る場面は多いと思います。
setAction()とredirect()の違い
setAction()とredirect()の違いを端的に説明すると、
setAction()はフォワードという移動は、プログラム内での処理によるものであるが、
redirect()は、指定したアドレス先に移動するものは、ブラウザが持つ機能を利用しているという違いになります。