0

コレクションフォームを永続化しようとしています...奇妙なことは、コードが2.0では機能していたが2.2では機能していなかったことです(私は間違っていると確信しています)

ここにコードの関連部分があります..

エラー

Error: Call to a member function setEventId() on a non-object in C:\wamp\www\new\src\Splurgin\EventsBundle\Entity\SplurginEventEvents.php line 317

私のフォームタイプで

    ->add('packages' , 'collection', array('type'=>new SplurginEventPackagesType(),
                                            'allow_add'    => true,
                                            'by_reference' => false,
        ))

エラーがある私のイベントエンティティ

/**
 * @ORM\OneToMany(targetEntity="Splurgin\EventsBundle\Entity\SplurginEventPackages", mappedBy="eventId" ,cascade={"persist"})
 */
private $packages;
    public function __construct()
    {
        $this->media = new \Doctrine\Common\Collections\ArrayCollection();
        $this->packages = new \Doctrine\Common\Collections\ArrayCollection();
    }

    public function getPackages()
    {
        return $this->packages;
    }

    public function setPackages($packages)
    {

        $this->packages = $packages ?: new \Doctrine\Common\Collections\ArrayCollection();
        foreach ($this->packages as $package) {
            $package->setEventId($this); // line of error
        }
        return $this->packages;
    }

私のパッケージ エンティティ

/**
 * @var integer $eventId
 * @ORM\ManyToOne(targetEntity="SplurginEventEvents", inversedBy="packages")
 * @ORM\JoinColumn(name="event_id", referencedColumnName="id")
 */
private $eventId;
/**
 * Set eventId
 *
 * @param integer $eventId
 */
public function setEventId(\Splurgin\EventsBundle\Entity\SplurginEventEvents $eventId)
{
    $this->eventId = $eventId;
}

/**
 * Get eventId
 *
 * @return integer
 */
public function getEventId()
{
    return $this->eventId;
}

パッケージタイプ

class SplurginEventPackagesType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('price')
            ->add('description')
            ->add('items')

        ;
    }
    public function setDefaultOptions(OptionsResolverInterface $options)
    {
        return array(
            'data_class' => 'Splurgin\EventsBundle\Entity\SplurginEventPackages',
        );
    }
    public function getName()
    {
        return 'packages';
    }
}

私のコントローラーでは、フォームが有効かどうかを確認して永続化するだけで興味深いものはありません。

update : 私はすでに js ファイルを更新しました

The placeholder was changed from $$name$$ to __name__ in Symfony 2.1

update2:機能を追加、追加、削除する必要があるようですが、よくわかりません

更新 3: add メソッドと remove メソッドを追加しました (ドキュメントと同じように) が、同じエラーが発生しますが、add メソッドで

add メソッドのコードは次のとおりです。変更された唯一のコードは setPackages メソッドです。

    public function getPackages()
    {
        return $this->packages;
    }
    public function addPackage( ArrayCollection   $package) // if i put the type hinting i get an error that array collection was not passed , i get a normal array instead
    {
        $package->setEventId($this); // this thoughs an error (because we cant use set event method on an array 
        $this->packages->add($package);
    }
    public function removePackage(ArrayCollection  $package)
    {
//...
    }
    public function setPackages($packages)
    {

        $this->packages = $packages ;

        return $this->packages;
    }
4

1 に答える 1

0

だから、たくさんの(そして私はたくさんのことを意味する)髪を引っ張った後、これが問題です

パッケージタイプで

public function setDefaultOptions(OptionsResolverInterface $options)
{
    return array(
        'data_class' => 'Splurgin\EventsBundle\Entity\SplurginEventPackages',
    );
}

する必要があります

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'Splurgin\EventsBundle\Entity\SplurginEventPackages',
    ));
}

これはばかげているように聞こえるかもしれませんが、私は少し眠る必要があると思います。

于 2013-06-12T07:49:38.367 に答える