Symfony 4实体获取器返回类型

时间:2019-01-22 17:05:15

标签: php symfony symfony4 return-type php-7.1

我目前在Sonata Admin上使用 PHP 7.1上的,并且实体获取方法的返回类型存在一些问题...由于我知道哪些字段可以为空,所以我可以设置强制性或可选的返回类型。但是,当我在奏鸣曲管理员的创建表单上绑定实体时,此方法不起作用,因为实体未初始化且所有字段均设置为null。解决方案很明显,但是哪个更正确?

解决方案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;
    }
}

哪种解决方案更好?感谢您的回答!

1 个答案:

答案 0 :(得分:1)

我认为选项1(返回null),这样就不必在数据库中创建区域和横幅记录。