Symfony 4 实体获取器 return 类型
Symfony 4 entity getters return types
我目前在 PHP 7.1 上使用 Symfony 4.1 和 Sonata Admin,实体吸气剂 return 类型有点问题...因为我知道哪些字段可以为空,所以我可以设置强制或可选的 return 类型。但是当我在 sonata admin 的创建表单上绑定实体时,这种方法不起作用,因为实体未初始化并且所有字段都设置为 null。解决方案很明显,但哪个更正确?
解决方案一:
使 return 类型可选(可为空)
/**
* @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;
}
}
方案二:
在构造函数中创建 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;
}
}
哪种解决方案更好?感谢您的回答!
我会考虑选项 1(return 空),以便在不需要时不会在数据库中创建区域和横幅记录。
我目前在 PHP 7.1 上使用 Symfony 4.1 和 Sonata Admin,实体吸气剂 return 类型有点问题...因为我知道哪些字段可以为空,所以我可以设置强制或可选的 return 类型。但是当我在 sonata admin 的创建表单上绑定实体时,这种方法不起作用,因为实体未初始化并且所有字段都设置为 null。解决方案很明显,但哪个更正确?
解决方案一: 使 return 类型可选(可为空)
/**
* @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;
}
}
方案二: 在构造函数中创建 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;
}
}
哪种解决方案更好?感谢您的回答!
我会考虑选项 1(return 空),以便在不需要时不会在数据库中创建区域和横幅记录。