代码之家  ›  专栏  ›  技术社区  ›  Hugo Le Goff

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

  •  1
  • Hugo Le Goff  · 技术社区  · 9 年前

    我实际上在学习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'));
        }
    
        //...
    
    }
    

    但是现在我想知道设置对象默认值的最佳方法是什么。最好只使用构造函数还是混合使用这两种方法。

    2 回复  |  直到 9 年前
        1
  •  3
  •   Vasil Kulakov    9 年前

    此外,不要忘记为列声明设置注释

    <?php
    /**
     * @Entity
     */
    class City {
        /**
         * @var string
         *
         * @Column(type="string", length="50", options={"default" : "Washington DC"})
         */
        private $name = 'Washington DC';
        ...
    }
    
        2
  •  2
  •   Serghei Luchianenco    9 年前

    我认为最好在中定义默认值 __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;
        }
    
        //...
    
    }