プロジェクトに多対多リレーションがありますが、リレーションテーブルを変更したいので、別のエンティティのジョインテーブルと多対1リレーションシップに変換しました。Symfony2チェックボックスリスト
問題は、2つの初期エンティティのチェックボックスグループをレンダリングしようとすると、私はそれを使用できないということです。ここで
は私のコードです:
class Professional extends User
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
...
/**
* @ORM\OneToMany(targetEntity="TurnsProfessional", mappedBy="professional")
*/
private $turns;
...
私の第二のエンティティ
class Turn
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
...
/**
* @ORM\OneToMany(targetEntity="TurnsProfessional", mappedBy="turn")
*/
private $professionals;
...
とエンティティに参加
class TurnsProfessional
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
public function __construct()
{
}
/**
* @ORM\ManyToOne(targetEntity="Turn", inversedBy="professionals")
* @ORM\JoinColumn(name="turn_id", referencedColumnName="id")
*/
private $turn;
/**
* @ORM\ManyToOne(targetEntity="Professional", inversedBy="turns")
* @ORM\JoinColumn(name="professional_id", referencedColumnName="id")
*/
private $professional;
/**
* @ORM\Column(type="boolean")
*/
private $status = 0;
...
私の目標はとプロフェッショナルフォームのチェックボックスリストを作成することですターン。ここ
...
->add('turns', 'entity',
array('class' => 'AppBundle:TurnsProfessional',
'property' => 'label',
'multiple' => true,
'expanded' => true,
));
...
問題は、フォームがチェックボックスをレンダリングしていないということです。
まず、私は電源を入れてProfessionalTypeに::クラスをフィールドを追加しようとしました:私は二つのことを試してみました。
...
->add('turns', 'entity',
array('class' => 'AppBundle:Turn',
'property' => 'label',
'multiple' => true,
'expanded' => true,
));
...
フォームは、すべてのチェックボックスをレンダリングしないが、私はそれを送信する上でエラーを取得する:私は、クラスを変更それ以外の場合
関連 AppBundle \上のタイプAppBundle \エンティティ\ターンの見つかり実体エンティティ\プロフェッショナル#はなりますが、(コメントに)オリバーが言ったように
I'veがフォームを編集し AppBundle \エンティティ\ TurnsProfessionalを期待:
TurnsProfessionalTypeclass TurnsProfessionalType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('status')
->add('turn', EntityType::class,
array('class' => 'AppBundle:Turn',
'property' => 'label',
'multiple' => true,
'expanded' => true,
));
}
public function getBlockPrefix()
{
return 'turns_professional_registration_form';
}
public function getName()
{
return $this->getBlockPrefix();
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => TurnsProfessional::class,
));
}
}
で
->add($builder->create('turns', CollectionType::class, array(
'entry_type' => TurnsProfessionalType::class,
'by_reference' => false,
)));
は今、私はとしてそれをレンダリングしました:
{% for turn in form.turns %}
<td><div class="checkbox">{{ form_widget(turn.status)}}<label></label></div></td>
{% endfor %}
しかし、私はラベルとして、それぞれのデータベースのラベルを配置する必要があり
を回す誰もい助けられる? ありがとうございました!
あなたは代わりに[CollectionTypeは](http://symfony.com/doc/2.7/reference/forms/types/collection.html)を使用する必要があります(フォームのコレクションを埋め込む方法)に関するsymfonyのドキュメントをご覧ください(https://symfony.com/doc/2.7/form/form_collections.html) – OlivierC
@OlivierC Turn of Collectionを使用する必要がありますか?またはTurnsProfessional? –
ターンエンティティを持つEntityTypeフィールドを持つTurnsProfessionalTypeのCollectionType – OlivierC