コントローラ
public function indexAction(Request $request)
{
$user = $this->container->get('security.context')->getToken()->getUser();
$owner = $user->getId();
$first = new First();
$first->setOwner($owner);
$second = new Second();
$second->setOwner($owner);
$second->setFirst($first);
$form = $this->createForm(new SecondType(), $second);
if ($request->getMethod() == 'POST') {
$form->bindRequest($request);
if ($form->isValid()) {
$em = $this->get('doctrine')->getEntityManager();
$em->persist($first);
$em->persist($second);
$em->flush();
}
}
return $this->render('MySampleBundle:Home:index.html.twig', array(
'form' => $form->createView(),
));
}
ORM ヤムル
My\SampleBundle\Entity\First:
type: entity
table: first
id:
id:
type: integer
generator: { strategy: AUTO }
fields:
title:
type: string
date_created:
type: datetime
date_edited:
type: datetime
owner:
type: integer
lifecycleCallbacks:
prePersist: [ prePersist ]
preUpdate: [ preUpdate ]
oneToMany:
reviews:
targetEntity: Second
mappedBy: review
My\SampleBundle\Entity\Second:
type: entity
table: second
id:
id:
type: integer
generator: { strategy: AUTO }
fields:
review:
type: string
date_created:
type: datetime
date_edited:
type: datetime
owner:
type: integer
lifecycleCallbacks:
prePersist: [ prePersist ]
preUpdate: [ preUpdate ]
manyToOne:
first:
targetEntity: First
inversedBy: reviews
joinColumn:
name: first_id
referencedColumnName: id
形状・種類
class FirstType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('title', 'text');
}
public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'My\SampleBundle\Entity\First',
);
}
public function getName()
{
return 'first';
}
}
class SecondType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('first', new FirstType());
$builder->add('review', 'textarea');
}
public function getName()
{
return 'second';
}
}
検証.yml
My\SampleBundle\Entity\First:
properties:
title:
- NotBlank: ~
- MinLength: 2
My\SampleBundle\Entity\Second:
properties:
review:
- NotBlank: ~
- MinLength: 14
作成したフォームは正常に動作します。ただし、バリデーションだけは正常に動作しません。
個別に実行すると、検証は正常に機能します。
$form = $this->createForm(new FirstType(), $first);
ただし、Entity Relationships/Associations 状態の場合、最初の検証は機能しません。First の title プロパティは 1 文字で登録されます。
どうすればそれを達成できますか?