我应该使用 Form::submit 来预先填写带有会话变量的表单吗?

Should I use Form::submit to pre-fill form with session variables?

我对 PHP 和 symfony 都很陌生,我正在查看我的一位同事编写的代码。 这是一个简单的查询表格,有确认页面。即使用户从确认 pagn 返回,它也应该记住用户输入的内容。 他使用会话来存储发布的数据,并使用 Form::submit 来填充用户先前输入的数据(例如姓名、电子邮件地址、消息正文)。

它有效,但是使用这种技术是个好主意吗?这样做有什么缺点吗?

首先,我不能再使用 Form::isSubmitted 检查用户是否提交了表单(因为手动调用 submit() 使这个标志为真),尽管我仍然可以使用 isMethod('POST' ).

其次,官方文档使用DB而不是session来存储临时变量。 在会话中存储临时数据是好是坏? https://symfony.com/doc/current/forms.html

我在 Whosebug 的某处读到提交将在 3.0 中删除,但它仍然存在,即使在官方 4.0 文档中也是如此。

在会话中存储数据有点短暂。这意味着当用户清除他们的浏览器缓存或切换到不同的浏览器时,例如在移动设备和台式机等其他设备上,数据将不存在。

当您将数据存储在数据库中时——这实际上只对登录用户有意义,以便能够将数据正确地关联回他们——您可以克服上述问题,但事实并非如此对于未登录的用户来说效果不佳。另外,这可能意味着工作量会稍微多一些。

这两种方法都很好,哪一种更合适实际上取决于您的用例以及您更关心哪一种缺点。

提交表单进行了一些更改。最近我想在 $form->isSubmitted() 之前调用 $form->isValid() 会给你一个弃用警告。我不知道 submit() 有任何变化,但您可以随时查看发布中的 UPGRADE-notes

如果您担心弃用,您应该检查您的日志(通常在 var/logs/dev.log 中)或 Web 分析器工具栏(使用 app_dev.php-入口点时在您页面的按钮上) .当 Symfony 弃用某些内容时,它会出现在那里,并且通常会就如何修改您的代码以在将来的更新中确保安全提供建议。

Symfony 遵循语义版本控制,因此仅在主要版本中删除已弃用的功能(从 3 到 4 将删除很多已弃用的内容)。这意味着即使您有弃用警告,您也应该进行较小的更新,除非弃用具有严重的安全隐患。尽管如此,尝试在更新后立即摆脱弃用通知对我来说通常是一个好习惯,以使工作量更易于管理。