На самом деле я изучаю 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 или сочетание этих двух методов — лучший подход.
Спасибо за чтение, и я надеюсь, что кто-нибудь даст мне ответ на этот вопрос.
Я бы порекомендовал вам установить значения по умолчанию для свойств, если это возможно. Если нет, используйте конструктор. Имейте в виду, что в доктрине конструктор ORM может быть опущен в некоторых случаях.
Также не забудьте установить аннотацию для объявления столбца
<?php
/**
* @Entity
*/
class City {
/**
* @var string
*
* @Column(type="string", length="50", options={"default" : "Washington DC"})
*/
private $name = 'Washington DC';
...
}
Я бы сказал, лучше определить значения по умолчанию в __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;
}
//...
}