これはここでの私の最初の質問ですので、間違いを許してください - 次回はそれらを避けるようにします. ;-)
FOSUserBundle のカスタム RegistrationFormType を作成しました。このフォームは、バンドルのデフォルト フィールドに加えて、PlayerType を処理します。この PlayerType 自体にも PlayerSkillsType が含まれています。ここにクラスがあります:
class RegistrationFormType extends BaseType
{
public function buildForm(FormBuilder $builder, array $options)
{
parent::buildForm($builder, $options);
$builder->add('player', new PlayerType());
}
public function getName()
{
return 'signup_form';
}
public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'Acme\AcmeBundle\Entity\User',
);
}
}
class PlayerType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('firstname');
$builder->add('lastname');
$builder->add('age');
$builder->add('playerSkills', new PlayerSkillsType());
}
public function getName()
{
return 'player_form';
}
public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'Acme\AcmeBundle\Entity\Player',
);
}
}
class PlayerSkillsType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('tackling');
$builder->add('passing');
$builder->add('shooting');
}
public function getName()
{
return 'playerSkills_form';
}
public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'Acme\AcmeBundle\Entity\PlayerSkills',
);
}
}
/**
* @ORM\Entity
*/
class Player
{
/**
* @ORM\OneToOne(targetEntity="PlayerSkills", cascade={"persist"})
*
* @var PlayerSkills
*/
private $playerSkills;
}
/**
* @ORM\Entity
*/
class PlayerSkills
{
/**
* @ORM\OneToOne(targetEntity="Player", cascade={"persist"})
*
* @var Player
*/
private $player;
}
(ゲッターとセッター、および重要でないプロパティとメソッドは除外しました。) これまでのところ問題なく動作しており、フォームが表示され、永続化されています。さて、私の問題は、データを永続化した後、データ内の PlayerSkills エンティティに Player エンティティへの参照が欠落していることです。
フォームビルダーにも参照を追加する必要があることを PlayerSkillsType に伝える必要があると思います..? それとも、これは Doctrine アノテーションの問題でしょうか?
どんなヒントでも大歓迎です!:-)