【问题标题】:Symfony 3 form not persisting to databaseSymfony 3 表单不持久保存到数据库
【发布时间】:2016-09-04 16:33:22
【问题描述】:

我目前正在使用 symfony 3 构建订阅表单,并且在开发环境中的所有工作都应该如此。一旦我将它部署到生产环境中,一开始一切正常 - 数据被推送到数据库,就像它应该为第一个订阅者一样。但是,当我关闭网站时,再次打开它,填写表格并尝试提交 - 数据不会推送到数据库。当时我没有收到任何特定错误,看起来它正在尝试将其推送到数据库,但随后在后台崩溃了,我最终完成了。

这对我来说似乎是部署问题,但我似乎无法弄清楚是哪一个。我正在使用 deployer.org 部署我的应用程序

部署时我收到此错误“无法为可写目录设置正确的权限。您需要将 sudo 的 sudoers 文件配置为不提示输入密码,或手动设置正确的权限。”我没有特别关注它,因为我的网站确实部署了,并且该网站的 1 个用户确实推送到 DB 就好了。

我正在使用 MySql 作为数据库

非常感谢任何帮助。

【问题讨论】:

  • 检查你的 var/logs/prod.log 文件,可能会显示一个明确的错误。
  • 感谢@Chuck Norris 的提示 - 刚刚转到我的 var/logs/prod.log 文件。我看到的错误是“request CRITICAL: Uncaught PHP Exception Symfony\Component\Debug\Exception\UndefinedMethodException:”尝试调用类“AppBundle\Entity\SubscriberDetails”的名为“setId”的未定义方法。你的意思是调用“getId”吗?“”问题是这个错误的 id 是一个唯一标识符,它是在 AppBundle/Controller/Entity/SubscriberDetails 中自动生成的 + 在我的本地主机上一切正常,所以不确定这是什么错误。
  • 在 prod 环境中尝试清除缓存:php bin/console c:c -e=prod(或删除 var/cache/ 中的文件夹 prod)
  • 您好,检查 Norris,尝试了以上所有方法,但仍然无效。

标签: forms symfony deployment php-deployer


【解决方案1】:

终于弄明白了。在我的 SubscriberDetails 实体中,我将 id 设置为自动生成(例如@ORM\GeneratedValue(strategy="AUTO")),出于我不确定的原因,我想知道这在 dev 上运行良好,但在 prod 上根本没有运行。所以解决这个问题的方法是从实体级别删除自动生成并通过以下方式在控制器中模拟它:

$query = $em ->createQuery('SELECT MAX(s.id) FROM AppBundle:SubscriberDetails s');
$newSubscriber ->setId($query->getSingleScalarResult() + 1);

这对我有用

【讨论】:

    猜你喜欢
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    相关资源
    最近更新 更多