Form::setData([]) 在发送电子邮件后删除联系表单的输入值在 CakePHP 中不起作用?

Form::setData([]) to remove input values of a contact form after sending email not working in CakePHP?

我参考文档 (https://book.cakephp.org/4/en/core-libraries/form.html) 在 Cakephp 4 中创建了一个联系表单。

我在发送电子邮件后删除输入值时遇到问题。

这是我的 ContactController.php :

<?php

namespace App\Controller;

use App\Controller\AppController;
use App\Form\ContactForm;

class ContactController extends AppController
{
    public function index()
    {
        $contact = new ContactForm();

        if ($this->request->is('post')) {
            if ($contact->execute($this->request->getData())) {
                $this->Flash->success('We will get back to you soon.');
                $contact->setData([]); // I want to remove data in contact form after the email has been sent, but it doesn't work
            } else {
                $this->Flash->error('There was a problem submitting your form.');
            }
        }

        $this->set('contact', $contact);
    }
}

为什么代码中的 $contact->setData([]); 没有删除我联系表中的数据?

表单助手将更喜欢请求数据,例如来自表单提交的 POST 数据,否则在发生验证错误时输入总是会丢失。

提交成功后如果想再次显示表单页面,则需要重定向到当前页面,这就是PRG(Post-Redirect-Get)模式。

所以不要 $contact->setData([]);,而是:

return $this->redirect(['action' => 'index']);

这也是您的烘焙控制器将为 addedit 操作执行的操作。

另见