【问题标题】:Why always null in form with field date? (in symfony2)为什么字段日期的表单总是为空? (在 symfony2 中)
【发布时间】:2014-08-20 19:28:01
【问题描述】:

我在 Symfony2 中遇到了 Form 的问题,

这是我的表单代码:

 $form = $this->createFormBuilder($pedido)
            ->setAction($this->generateUrl("ec_main_guardar_pedido"))
            ->add('cliente','entity',array('class' =>'ECMainBundle:Clientes','property'=>'cliente'))
            ->add('fecha', 'date', array('widget' => 'single_text',
                                         'format' => 'd-M-y',
                                         'required' => 'false',
                                         'read_only' => 'false'))
            ->add('fentrega', 'date',array('format' => 'yyyy-MM-dd'))
            ->add('estado','hidden', array('data' => '3'))
            ->add('Guardar', 'submit')
            ->getForm();

“fecha”字段不起作用,我用另一种格式进行测试,但我没有解决方案,总是说“null”,我尝试生成 javascript 以显示一个日历,但问题总是一样的空。

如果在实体中添加:

public function __construct()
    {
        $this->lineas = new ArrayCollection();
        $this->fecha= new \DateTime();
        $this->fentrega= new \DateTime();
    }

“fecha”字段始终是今天。

带有小部件选择的字段“fentrega”工作完美。

有人可以帮帮我吗?

提前致谢。

【问题讨论】:

  • 你的意思是fecha输入的value属性等于null(<input value="null" />)吗?
  • 当尝试持久化这些值时,这样说:执行带有参数 [" 3", null, "2009-01-01", 3]: SQLSTATE[23000]: 完整性约束违规: 1048 列 'fecha' 不能为空'
  • 即使你选择了一个有效的日期,它是否为 NULL?例如 20-8-2014?
  • 至于例外,您可以通过在该字段上允许 null 来避免这种情况:* @ORM\Column(name="fecha", type="datetime", nullable=true)
  • 谢谢,我发现持久化数据的操作有错误,现在当我输入日期 20-8-2014 时工作完美,但是,当我使用日历时,使用以下代码:@ 987654327@ another time es null...有什么建议吗?

标签: php forms date symfony datetime


【解决方案1】:

好吧,现在完美了,问题是日期的格式。

使用此代码可以正常工作:

控制器:

$form = $this->createFormBuilder($pedido)
            ->setAction($this->generateUrl("ec_main_guardar_pedido"))
            ->add('cliente','entity',array('class' => 'ECMainBundle:Clientes','property'=>'cliente'))
            ->add('fecha', 'date', array('widget' => 'single_text',
                                         'format' => 'd-M-y'))
            ->add('fentrega', 'date',array('format' => 'yyyy-MM-dd'))
            ->add('estado','hidden', array('data' => '3'))
            ->add('Guardar', 'submit')
            ->getForm();

在视图中:

$('#form_fecha').datepicker({
            dateFormat : 'd-m,-yy',
            prevText : '<i class="fa fa-chevron-left"></i>',
            nextText : '<i class="fa fa-chevron-right"></i>',

        });

问题是'format' =&gt; 'd-M-y') 等于dateFormat : 'd-mm-yy' 原因...我不知道...

感谢大家的帮助

【讨论】:

  • 原因是日期格式 - Symfony 日期字段类型和 jQuery dateFormat 选项之间必须保持一致。它们在两者中是不同的。在 Symfony 中:userguide.icu-project.org/formatparse/…,在 jQuery 中:api.jqueryui.com/datepicker/#utility-formatDate。所以 Symfony 中的 d-M-y 等于 jQuery 中的 d-mm-yy
  • 哦,你需要编辑你的答案,不是dd-m-yy。 Symfony 的d-M-yday-no-leading-zeros-month-with-leading-zeros-year-four-digits,它的日期选择器格式是d-mm-yy,正如我之前的评论中所说的。
【解决方案2】:

不要使用__construct() 设置默认数据。在对象被创建(通过 __construct)之后,Doctrine 发挥它的魔力并覆盖由构造函数设置的值。 准备方法setDefauts() 并将设置默认数据放在那里。然后,在创建模型之后,即。在控制器操作中运行此方法。

// /Acme/FooBundle/Entity/Bar.php
// ...
public function setDefaults()
{
    $this->fecha = new \DateTime();
    $this->fentrega = new \DateTime();
}
// ...


// /Acme/FooBundle/Controller/BarController.php
// ...
public function someAction()
{
    $var = new Bar();
    $var->setDefaults();
}
// ...

【讨论】:

    猜你喜欢
    • 2015-12-08
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多