2017-08-02 132 views
-1

我实际上在学习Symfony3,虽然我设置了对象字段的默认值,但我发现我无法将DateTime对象设置为默认值,这是我从跟随教程中学到的常用方式参考下面的代码)。设置Symfony对象的默认值的最佳方法是什么?

<?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

使用'__constructor'允许使用更多。正如您所看到的,根据您的PHP版本分配对象或常量是有问题的。同样使用ctor允许您在实例化时覆盖“默认”。这可能值得一读(原型模式):http://ralphschindler.com/2012/03/09/php-constructor-best-practices-and-the-prototype-pattern – ficuscr

回答

0

我建议你设置属性的默认值,如果可能的话。如果不是,请使用构造函数。请记住,在学说ORM中,构造函数在某些情况下可以省略。 此外,不要忘记为列声明设置注释

<?php 
/** 
* @Entity 
*/ 
class City { 
    /** 
    * @var string 
    * 
    * @Column(type="string", length="50", options={"default" : "Washington DC"}) 
    */ 
    private $name = 'Washington DC'; 
    ... 
} 
+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; 
    } 

    //... 

} 
相关问题