CakePHP 4 のテンプレートで CSRF トークンを FomHelper を使わずに埋め込む
CakePHP 4 には FormHelper という仕組みがあります。これを使うとタグの記述量をかなり減らすことができるのですが、タグの構造が把握しづらくなるデメリットもあります。
- Form (CakePHP 4 Cookbook)
- https://book.cakephp.org/4/en/views/helpers/form.html
手動で <form> タグなどを記述した場合、そのままPOST送信すると「Missing CSRF token body」のエラーが出ます。
(Cake\Http\Exception\InvalidCsrfTokenException が発生します)
これを解決するためには、テンプレートに下記のように追記すればOKです。
templates/Sample/index.php
<form method="post">
...
<!-- ↓これを追加 -->
<input
type="hidden" name="_csrfToken" autocomplete="off"
value="<?= $this->request->getAttribute('csrfToken') ?>">
...
</form>
今回は CakePHP 4.0.3 で試しています。CakePHP 3 とは異なるのでご注意ください。
CakePHP 3 での実装方法は「CakePHP 3 のテンプレートで FormHelper を使わずに、直接 CSRF トークンを埋め込む>」をご覧ください。