Получатели сущностей Symfony 4 возвращают типы - PullRequest
0 голосов
/ 22 января 2019

В настоящее время я использую 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;
    }
}

Какое решение лучше? Спасибо за любой ответ!

1 Ответ

0 голосов
/ 22 января 2019

Я думаю, что вариант 1 (вернуть ноль), чтобы записи зон и баннеров не создавались в базе данных, если они не нужны.

...