Установка различных значений сущностей в форме гидратора - PullRequest
0 голосов
/ 04 марта 2019

Итак, я только что перешел на гидратный подход к формам и выглядит довольно аккуратно.Хотя у меня есть одна небольшая проблема.У меня есть две сущности Contact и ContactSocialMediaAccount, поэтому мне потребуется Contact->getId() для сохранения ContactSocialMediaAccount сущности, но каждый раз, когда я отправляю форму, она говорит, что Entity_ID не может быть нулевым.А это Entity_ID это ContactSocialMediaAccount таблица.

Это таблица контактов и сущность

class Contact {
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(name="ID")
*/
protected $ID;
/**
* @ORM\Column(
*   name="FirstName",
*   type="string",
*   options={"default" : ""}
* )
*/
protected $FirstName                 =  "";
public function getID($asString = false) {

    return $asString ? "JOU-" . $this->ID : $this->ID;

}

public function setID($id) {

    $this->ID                        =  $id;

}

public function getFirstName() {

    return $this->FirstName;

}

public function setFirstName($firstName) {

    $this->FirstName                 =  $firstName;

}
}

А это ContactSocialMediaAccount

class ContactSocialMediaAccount {
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(name="ID")
*/
/**
 * @ORM\ManyToOne(targetEntity="Contact")
 * @ORM\JoinColumn(name="Entity_ID", referencedColumnName="ID")
 */
private $Contact;

public function getContact() {

    return $this->Contact;

}

public function setContact($contact) {

    $this->Contact                   =  $contact;

    return $this;

}
}

ContactFieldSet.php

public function __construct(ObjectManager $objectManager) {

    parent::__construct("Contact");

    $this->setHydrator(new DoctrineHydrator($objectManager));
    $this->setObject(new Contact());
//rest of the fields

    $socialMediaFieldset             =  new SocialMediaFieldset($objectManager);

    $this->add([
        "type"                       => Element\Collection::class,
        "name"                       => "SocialMediaAccounts",
        "options"                    => [
            "count"                  => 5,
            "should_create_template" => false,
            "allow_add"              => true,
            "allow_remove"           => false,
            "target_element"         => $socialMediaFieldset
        ]
    ]);
}

И ContactSocialMediaFieldset.php

public function __construct(ObjectManager $objectManager) {

    parent::__construct("socialMediaAccount");

    $this->setHydrator(new DoctrineHydrator($objectManager));
    $this->setObject(new ContactSocialMediaAccount());


    $this->add([
        "name"                       => "URL",
        "type"                       => "Text",
    ]);
}

И мой ContactForm.php

public function __construct(ObjectManager $objectManager) {

    parent::__construct("contactForm");

    $this->setHydrator(new DoctrineHydrator($objectManager));
    $this->setInputFilter(new InputFilter());

    $contactFieldset                 =  new ContactFieldset($objectManager);
    $contactFieldset->setUseAsBaseFieldset(true);
    $this->add($contactFieldset);
}

Как мне добавить заполнить Entity_ID в полях SocialMedia.Я добавил это в контактную сущность

/**
 * @param SocialMediaAccounts[] $socialMediaAccounts
 * @return self
 */
public function setSocialMediaAccounts(array $socialMediaAccounts) {

    $this->SocialMediaAccounts       =  $socialMediaAccounts;

    return $this;

}

/**
 * @return SocialMediaAccounts[]
 */
public function getSocialMediaAccounts() {

    if (!$this->SocialMediaAccounts->count()) {

        $accounts                    =  [];

        foreach (ContactSocialMediaAccount::getTypes() as $type => $name) {

            $account                 =  new ContactSocialMediaAccount;
            $account->setSocialMediaID($type);

            $this->SocialMediaAccounts->add($account);

        }

    }

    return $this->SocialMediaAccounts;

}

/**
 * @param Collection $socialMediaAccounts
 */
public function addSocialMediaAccounts(Collection $socialMediaAccounts) {

    foreach ($socialMediaAccounts as $socialMediaAccount) {

        $socialMediaAccount->setContact($this);
        $this->SocialMediaAccounts->add($socialMediaAccount);

    }

}

Кажется, это не сработало.

...