フォーム内の関連エンティティから属性にアクセスできないため、現在、フォームと保持されているエンティティに苦労しています。
form.get('value') // access current entity
form.get('value').relatedEntity // (access the related entity)
form.get('value').relatedEntity.property // is not working
私の現在の解決策は最善ではないと思うので、シナリオ全体をより詳細に説明したいと思います。フォームの設計を少し変えることで、問題全体を回避できるかもしれません。
私は基本的に、1つのフォーム内で複数のエンティティを送信する方法に関する指示に従いましたhttps://groups.google.com/forum/?fromgroups#!topic/symfony2/DjwwzOfUIuQ%5B1-25%5D
まず、これが私のエンティティです。
//@ORM\Entity
class Game {
//@ORM\Column(name="scoreT1", type="integer", nullable=true)
private $scoreT1;
//@ORM\Column(name="scoreT2", type="integer", nullable=true)
private $scoreT2;
//@ORM\OneToOne(targetEntity="Bet", mappedBy="game")
private $bet;
}
//@ORM\Entity
class Bet {
//@ORM\Column(name="scoreT1", type="integer", nullable=true)
private $scoreT1;
//@ORM\Column(name="scoreT2", type="integer", nullable=true)
private $scoreT2;
// @ORM\OneToOne(targetEntity="Game", inversedBy="bet")
private game;
}
そして、これらは私のフォームです:
class GamesListType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('bets', 'collection',array(
'required' => false,
'allow_add' => false,
'type' => new BetType()
))
;
}
public function getDefaultOptions(array $options)
{
return array('data_class' => 'Strego\TippBundle\Form\Model\BetCollection');
}
}
class BetType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('scoreT1')
->add('scoreT2');
;
}
public function getDefaultOptions(array $options)
{
return array('data_class' => 'Strego\TippBundle\Entity\Bet');
}
}
GamesListFormの「mainEntity」から賭けを取得するために、専用のCollectionclassを作成しました。
use Doctrine\Common\Collections\ArrayCollection;
class BetCollection extends ArrayCollection {
public function getBets(){
return $this;//->toArray();
}
}
これは私が取り組んでいる環境です。私の要件は、どういうわけかゲームのリストとこのゲームに賭けるフォームを表示することです。私は現在、次のようにそれを達成しようとしています:
{% for bet in form.bets %}
bet.get('value').game.scoreT1 // <-- this is my current issue
<div class="row">{{ form_widget(item) }}</div>
{% endfor %}
ゲームのリストとその隣のフォームを実現する方法を入力したいので、シナリオ全体を説明しています。もう1つのアイデアは、GamesList / Game / Betの3つのフォームを用意することでしたが、どういうわけか、symfonyによって停止されたエンドレスループに遭遇しました。フォームの3つのレイヤーに一般的な問題はありますか?