В настоящее время я использую Symfony 4.1 на PHP 7.1 с администратором Sonata , и есть небольшая проблема с типами возвращаемых значений для получателей сущностей ... Так как я знаю, какие поля можно обнулять, я могу установить обязательные или дополнительные тип возврата. Но этот подход не работает, когда я связываю сущность с формой создания администратора сонаты, потому что сущность не инициализирована, и все поля имеют нулевое значение. Решение очевидно, но что правильнее?
Решение 1:
Сделайте тип возврата необязательным (обнуляемым)
/**
* @ORM\Table(name="banner__banner_zone_relation")
* @ORM\Entity()
*/
class BannerZoneRelation implements TimestampableInterface
{
/**
* @var Banner
* @ORM\ManyToOne(targetEntity="App\Entity\Banner\Banner", inversedBy="bannerZoneRelations", cascade={"persist"})
* @ORM\JoinColumn(name="banner_id", referencedColumnName="id")
*/
protected $banner;
/**
* @var Zone
* @ORM\ManyToOne(targetEntity="App\Entity\Banner\Banner",inversedBy="bannerZoneRelations", cascade={"persist"})
* @ORM\JoinColumn(name="zone_id", referencedColumnName="id")
*/
protected $zone;
/
/**
* @return Banner|null
*/
public function getBanner(): ?Banner
{
return $this->banner;
}
/**
* @return Zone|null
*/
public function getZone(): ?Zone
{
return $this->zone;
}
}
Решение 2:
Создание экземпляра Banner и Zone в конструкторе
/**
* @ORM\Table(name="banner__banner_zone_relation")
* @ORM\Entity()
*/
class BannerZoneRelation implements TimestampableInterface
{
/**
* @var Banner
* @ORM\ManyToOne(targetEntity="App\Entity\Banner\Banner", inversedBy="bannerZoneRelations", cascade={"persist"})
* @ORM\JoinColumn(name="banner_id", referencedColumnName="id")
*/
protected $banner;
/**
* @var Zone
* @ORM\ManyToOne(targetEntity="App\Entity\Banner\Banner",inversedBy="bannerZoneRelations", cascade={"persist"})
* @ORM\JoinColumn(name="zone_id", referencedColumnName="id")
*/
protected $zone;
public function __construct()
{
$this->banner = new Banner();
$this->zone = new Zone();
}
/
/**
* @return Banner
*/
public function getBanner(): Banner
{
return $this->banner;
}
/**
* @return Zone
*/
public function getZone(): Zone
{
return $this->zone;
}
}
Какое решение лучше? Спасибо за любой ответ!