我实际上正在学习Symfony3,而我正在设置对象字段的默认值,我发现我无法将DateTime对象设置为我从中学到的常用方法的默认值我正在关注的教程(参见下面的代码)。
<?php
namespace UTM\UsersBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* User
*
* @ORM\Table(name="utm_users", uniqueConstraints={@ORM\UniqueConstraint(name="uuid", columns={"uuid"}), @ORM\UniqueConstraint(name="username", columns={"username"})}, indexes={@ORM\Index(name="group_id", columns={"group_id"})})
* @ORM\Entity
*/
class User
{
//...
private $var = 'value';
//...
}
所以我寻找了一个解决方案,我发现我可以使用构造函数来实现这一点,所以我已经完成了以下代码。
<?php
namespace UTM\UsersBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* User
*
* @ORM\Table(name="utm_users", uniqueConstraints={@ORM\UniqueConstraint(name="uuid", columns={"uuid"}), @ORM\UniqueConstraint(name="username", columns={"username"})}, indexes={@ORM\Index(name="group_id", columns={"group_id"})})
* @ORM\Entity
*/
class User
{
//...
private $var;
//...
public function __construct() {
$this->setVar(new DateTime('0000-00-01 00:00:00'));
}
//...
}
但现在我想知道设置对象默认值的最佳方法是什么。最好只使用__construct函数,或者这两种方法的混合是最好的方法。
感谢您阅读,我希望有人能为我提供这个问题的答案。
答案 0 :(得分:1)
我会更好地在__construct
中定义默认值,因为您将在一个地方看到所有这些值(特别是当您有许多属性时),并且您可以分配对象,而不仅仅是标量值。
namespace UTM\UsersBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
class User
{
//...
private $created;
private $enabled;
//...
public function __construct() {
$this->created = new \DateTime();
$this->enabled = true;
}
//...
}
答案 1 :(得分:1)
如果可能的话,我建议您为属性设置默认值。如果没有,请使用构造函数。请记住,在某些情况下,在原则中可以省略ORM构造函数。 另外,不要忘记为列声明设置注释
<?php
/**
* @Entity
*/
class City {
/**
* @var string
*
* @Column(type="string", length="50", options={"default" : "Washington DC"})
*/
private $name = 'Washington DC';
...
}