与 Sonata Admin Bundle 的简单约会
Simple date with Sonata Admin Bundle
我有一个带有日期的 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
...但是如果我在实体 class 中做 print_r($birthdate)
它会显示 DateTime
对象 ...
以下是有趣的实体部分:
/**
* @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;
}
我目前的问题是我不知道我应该做什么,我只想要日期,没有时间,没有其他任何东西,我不知道该列是否应该是日期(我与数据库)。我应该为我的变量类型使用什么,我在这里感到迷茫,不可能简单 Date
??
我试图找出它可能来自哪里,但是当我改变太多时,我最终得到: This form should not contain extra fields
直接在表格中,甚至 Incorrect value
,但该字段是有效日期 ...
感谢您的帮助!!
来自手册 (sonata-project.org) :
If no type is set, the Admin class will use the one set in the
doctrine mapping definition.
所以,你可以试试这个:
->add('birthdate', null, array('format' => 'yyyy-MM-dd'));
编辑
正如@rande 所说,修改供应商文件不是可行的方法,它为本地私有应用程序提供了一个简单的临时解决方法。由于它不致力于保持这种状态,所以一旦我有更多时间,我就会处理这个问题。很抱歉延迟回复你们。
我试了一下,尝试了多种设置,我花了很多时间才弄明白,但我最终得出的结论是问题...是由另一个日期引起的,我在构造函数中生成了错误上面一行。
另外,感谢你们所有人,是你们指引我走上了正确的道路!
将您的字段类型更改为 sonata_type_date_picker 并测试错误消息是否仍然存在。
->add('birthdate', 'sonata_type_date_picker', array(
'format' => 'dd/MM/yyyy',
'widget' => 'single_text',
'label' => 'Birthdate',
))
@wr0ng.name 你不应该覆盖供应商代码。从来没有。
您的映射某处有问题。您可以使用学说的命令来检查您的实体。
我有一个带有日期的 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
...但是如果我在实体 class 中做 print_r($birthdate)
它会显示 DateTime
对象 ...
以下是有趣的实体部分:
/**
* @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;
}
我目前的问题是我不知道我应该做什么,我只想要日期,没有时间,没有其他任何东西,我不知道该列是否应该是日期(我与数据库)。我应该为我的变量类型使用什么,我在这里感到迷茫,不可能简单 Date
??
我试图找出它可能来自哪里,但是当我改变太多时,我最终得到: This form should not contain extra fields
直接在表格中,甚至 Incorrect value
,但该字段是有效日期 ...
感谢您的帮助!!
来自手册 (sonata-project.org) :
If no type is set, the Admin class will use the one set in the doctrine mapping definition.
所以,你可以试试这个:
->add('birthdate', null, array('format' => 'yyyy-MM-dd'));
编辑
正如@rande 所说,修改供应商文件不是可行的方法,它为本地私有应用程序提供了一个简单的临时解决方法。由于它不致力于保持这种状态,所以一旦我有更多时间,我就会处理这个问题。很抱歉延迟回复你们。
我试了一下,尝试了多种设置,我花了很多时间才弄明白,但我最终得出的结论是问题...是由另一个日期引起的,我在构造函数中生成了错误上面一行。
另外,感谢你们所有人,是你们指引我走上了正确的道路!
将您的字段类型更改为 sonata_type_date_picker 并测试错误消息是否仍然存在。
->add('birthdate', 'sonata_type_date_picker', array(
'format' => 'dd/MM/yyyy',
'widget' => 'single_text',
'label' => 'Birthdate',
))
@wr0ng.name 你不应该覆盖供应商代码。从来没有。
您的映射某处有问题。您可以使用学说的命令来检查您的实体。