设置Symfony对象的默认值的最佳方法是什么?

时间:2017-08-02 19:18:17

标签: php symfony doctrine-orm symfony-3.3

我实际上正在学习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函数,或者这两种方法的混合是最好的方法。

感谢您阅读,我希望有人能为我提供这个问题的答案。

2 个答案:

答案 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';
    ...
}