为什么总是在带有字段日期的表单中为空(在symfony2中)

时间:2014-08-20 19:28:02

标签: php forms date symfony datetime

我在Symfony2中遇到问题,

这是mi形式代码:

 $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来显示一个日历,但问题是相同的,总是null

如果在实体中添加此内容:

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

字段' fecha'永远是今天。

田野' fentrega'随着小部件选择工作完美。

有人可以帮忙吗?

提前致谢。

2 个答案:

答案 0 :(得分: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' => 'd-M-y')等于dateFormat : 'd-mm-yy'原因......我不知道......

感谢大家的帮助

答案 1 :(得分:-1)

请勿使用__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();
}
// ...