Каков наилучший способ установить значения по умолчанию для объекта Symfony?

На самом деле я изучаю 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 или сочетание этих двух методов — лучший подход.

Спасибо за чтение, и я надеюсь, что кто-нибудь даст мне ответ на этот вопрос.

0

Решение

Я бы порекомендовал вам установить значения по умолчанию для свойств, если это возможно. Если нет, используйте конструктор. Имейте в виду, что в доктрине конструктор ORM может быть опущен в некоторых случаях.
Также не забудьте установить аннотацию для объявления столбца

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

По вопросам рекламы [email protected]