Я пытаюсь сохранить новые данные (когда я изменяю, все работает нормально) в виде встраивания, но allow_add не работает.
Когда я посылаю входные данные прототипа броска данных, запрос-> запрос:
ads[adsCapPublisher][new_created_0][publisher]:2302
ads[adsCapPublisher][new_created_0][dailyLimit]:2
ads[adsCapPublisher][edit_0][publisher]: 5201
ads[adsCapPublisher][edit_0][dailyLimit]: 5
Правильно обработанный edit_0 создает AdType с AdsCapPublisherType, но когда я добавляю новые входные данные, выбрасывает javascript, когда обрабатывает данные, происходит сбой в $ request-> handleRequest ():
Catchable fatal error: Argument 1 passed to addAdsCapPublisher() must be an instance of AdsCapPublisher, null given in Ads.php on line 721
Данные являются нулевыми. И когда я устанавливаю значение allow_add в false, редактирование сущностей проходит успешно, но новости возвращают ошибку формы:
this form should not contain extra fields
Вот мои слова:
Ads.php
class Ads{
/**
* @ORM\OneToMany(targetEntity="AdsCapPublisher", mappedBy="ad", cascade={"persist", "remove"})
**/
protected $adsCapPublisher;public function addAdsCapPublisher(AdsCapPublisher $adCapPublisher)
{
$this->adsCapPublisher[] = $adCapPublisher;
return $this;
}
public function removeAdsCapPublisher(AdsCapPublisher $adCapPublisher)
{
$this->adsCapPublisher->removeElement($adCapPublisher);
}
public function getAdsCapPublisher()
{
return $this->adsCapPublisher;
}
public function setAdsCapPublisher($adsCapPublisher)
{
$this->adsCapPublisher = $adsCapPublisher;
return $this;
}
[...]
}
AdsCapPublisher.php
class AdsCapPublisher{/**
* @var Users
*
* @ORM\ManyToOne(targetEntity="Users", fetch="LAZY")
* @ORM\JoinColumn(name="id_publisher", referencedColumnName="id_user")
*/
protected $publisher;
/**
* @var decimal $dailyLimit
*
* @ORM\Column(name="daily_limit", type="decimal", nullable=false)
*/
protected $dailyLimit;
[...]
}
AdsType.php
public function buildForm(FormBuilderInterface $builder, array $options)
{
$entityId= $builder->getData();
$builder->add('adsCapPublisher', 'collection', array(
'type' => new AdsCapPublisherType(),
'required' => false,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false
))
AdsCapPublisherType.php
class AdsCapPublisherType extends AbstractType{
public function buildForm(FormBuilderInterface $builder, array $options)
{
// -- SECTION: General
$builder
->add('publisher', 'hidden', array(
'attr' => array(
'class' => 'js-field-popup-publisher-added'
)))
->add('dailyLimit', 'text', array(
'required' => false,
'attr' => array(
'class' => 'js-field-popup-budget-added form-control k-input-field k-is-input-text k-ellipsis k-has-currency-inside-input',
'min' => 0,
)
));
}
public function getName()
{
return 'adsCapPublisher';
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'csrf_protection' => false,
'data_class' => 'Entity\AdsCapPublisher',
'csrf_field_name' => '_token',
'intention' => 'ads',
'translation_domain' => 'ads',
'empty_data' => null
));
}
}
Любая помощь? : S
Задача ещё не решена.
Других решений пока нет …