Sonata Admin Bundle简单约会

时间:2015-01-26 19:15:56

标签: postgresql symfony date doctrine-orm sonata-admin

我有一个带有日期的Sonata Admin Bundle表单,用于设置我们要添加的用户的生日。这里有MemberAdmin.php

/**
 * @param \Sonata\AdminBundle\Form\FormMapper $formMapper
 *
 * @return void
 */
protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
        ->with('General')
            ->add('username')
            ->add('name')
            ->add('surname')
            ->add('birthdate', 'birthday', array('format' => 'yyyy-MM-dd'))
            // ...
}

我的问题是当我发送表单时,我获得了Error: Call to a member function format() on a non-object ...但是如果我在实体类中执行print_r($birthdate)它会向我显示DateTime对象... < / p>

以下是有趣的实体部分:

/**
 * @var date
 *
 * @ORM\Column(name="birthdate", type="date", nullable=true, options={"default" = "1990-01-01 00:00:00"})
 * @Assert\DateTime()
 */
private $birthdate;


/**
 * Set birthdate
 *
 * @param \DateTime $birthdate
 * @return Membre
 */
public function setBirthdate($birthdate)
{
    $this->birthdate = $birthdate;

    return $this;
}

/**
 * Get birthdate
 *
 * @return \DateTime 
 */
public function getBirthdate()
{
    return $this->birthdate;
}

我目前的问题是,我不知道自己应该做什么,我只想要约会,没有时间,没有其他任何事情,我不知道专栏是否应该约会(我使用PostgreSQL)。我应该对变量的类型使用什么,我觉得这里丢失了,没有简单的Date可能吗?

我试图找出它可能来自哪里,但是当我改变太多时,我最终会直接在表单中使用:This form should not contain extra fields,甚至是Incorrect value,但该字段是有效的日期...

感谢您的帮助!!

4 个答案:

答案 0 :(得分:1)

将您的字段类型更改为sonata_type_date_picker,并测试错误消息是否仍然存在。

 ->add('birthdate', 'sonata_type_date_picker', array(
              'format' => 'dd/MM/yyyy',
              'widget' => 'single_text',
              'label' => 'Birthdate',

          ))

答案 1 :(得分:0)

来自手册(sonata-project.org):

  

如果未设置类型,Admin类将使用中的一个   学说映射定义。

所以,你可以试试这个:

->add('birthdate', null, array('format' => 'yyyy-MM-dd'));

答案 2 :(得分:0)

修改

正如@rande所说,修改供应商文件不是可行的方法,它为本地私有应用程序提供了一个简单的临时解决方法。由于不是那么致力于保持这种状态,所以一旦我有更多时间,我就会处理这个问题。很抱歉延迟回到你们身边。

我玩过,试过多次设置,我花了很多时间搞清楚,但我终于得出结论,问题......是由另一个日期引起的,我在构造函数中生成错误一行上方。

另外,感谢你们所有人,这引导我走上了正确的道路!

答案 3 :(得分:0)

@ wr0ng.name你永远不应该覆盖供应商代码。 NEVER。

你的地图出现问题。您可以使用doctrine的命令来检查您的实体。