Cakephp PHP WEB開発

【Cakephp4】setActionはCake4.2から非推奨だった件

※本サイトはPR表記を含みます。

Cake4.2から setAction() は非推奨とされています。以下のようなエラーと遭遇しました。

 error
notice: Controller::setAction() is deprecated. Either refactor your code to use `redirect()`, or call the other action as a method.

エラー内容に親切にかかれていますが、代替の解決方法は redirect() するか、該当するアクションの実行をすればOKとのこと。

Cakephp4: 4.2から setAction() は非推奨となっている

public function add()
{
    $this->setAction('edit');
}

上記コードはシンプルに setAction を実行した例です。たとえば、add() アクションと edit() アクションがほぼ同じ処理の場合、同じようなコードを書くのは非効率です。

そのような場合にsetAction() を利用して、新規と編集の処理を同じアクション内にまとめたいといった場合に便利です。

Cakephp4: setAction() の代替方法

public function add()
{
    $this->viewBuilder()->setTemplate('edit');

    return $this->edit();
}

上記コードのようにすることで setAction() 時と同様の稼働ができると思います。

最初、自分は別のレンダリングを指定するために render() を利用していたのですが、期待通りの動作をせず、かなり悩みました汗

おそらく、原因としては edit() アクション内に edit を更にレンダリングしようとしていた。という感じでしょうか。

正解は、add() アクション内に setTemplate() を指定することでうまく解決することができました。

 

ちなみに、setAction() はAPIなど公式ドキュメントに非推奨は掲載されていません汗

Cakephp本体コードにて記述されています。

■ Cakephp4.4.1 本体: @deprecated 4.2.0 Refactor your code use `redirect()` instead of forwarding actions.
https://github.com/cakephp/cakephp/blob/4.4.11/src/Controller/Controller.php#L713-L721

-Cakephp, PHP, WEB開発
-