设置 Symfony 对象默认值的最佳方法是什么?
What is the best way to set defaults values of a Symfony object?
我实际上是在学习 Symfony3,当我设置对象字段的默认值时,我发现我无法按照从教程 I 中学到的常用方法将 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 函数更好还是混合使用这两种方法更好。
感谢您的阅读,希望有人能为我提供这个问题的答案。
我会说在 __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;
}
//...
}
如果可能的话,我建议您为属性设置默认值。如果没有,请使用构造函数。请记住,在某些情况下可以省略 ORM 构造函数。
另外,不要忘记为列声明设置注释
<?php
/**
* @Entity
*/
class City {
/**
* @var string
*
* @Column(type="string", length="50", options={"default" : "Washington DC"})
*/
private $name = 'Washington DC';
...
}
我实际上是在学习 Symfony3,当我设置对象字段的默认值时,我发现我无法按照从教程 I 中学到的常用方法将 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 函数更好还是混合使用这两种方法更好。
感谢您的阅读,希望有人能为我提供这个问题的答案。
我会说在 __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;
}
//...
}
如果可能的话,我建议您为属性设置默认值。如果没有,请使用构造函数。请记住,在某些情况下可以省略 ORM 构造函数。 另外,不要忘记为列声明设置注释
<?php
/**
* @Entity
*/
class City {
/**
* @var string
*
* @Column(type="string", length="50", options={"default" : "Washington DC"})
*/
private $name = 'Washington DC';
...
}