2012-10-16 21 views
7

kontrolörSymfony2'nin doğrulama çalışmadığında Varlık İlişkiler/Dernekler

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 Yaml

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 

Formu/Tür

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'; 
    } 
} 

Validation.yml

My\SampleBundle\Entity\First: 
    properties: 
     title: 
      - NotBlank: ~ 
      - MinLength: 2 

My\SampleBundle\Entity\Second: 
    properties: 
     review: 
      - NotBlank: ~ 
      - MinLength: 14 

Oluşturulan form normal çalışıyor. Ancak, yalnızca doğrulama normal şekilde çalışmıyor.

Tek tek gerçekleştirirse doğrulama normal şekilde çalışır. Bir Varlık İlişkiler/Dernekler durumundaysa

$form = $this->createForm(new FirstType(), $first); 

Ancak, ilk doğrulama kayıtlı olacak bir karakter ilk başlık özelliğini Alacağınız yardım olmayacaktır.

Bunu başarmayı nasıl başarabilirim?

+0

Çevre Symfony'nin 2.1.2 geçerli: Bunu yanı doğrulamak yapmak first sahada Valid constraint koymak gerekir. – JIGEN

+0

Sadece symfony2.1 olarak etiketlendi, eğer –

cevap

14

Symfony 2.1+, tüm katıştırılmış nesneleri otomatik olarak doğrulamıyor.

My\SampleBundle\Entity\Second: 
    properties: 
     first: 
      - Valid: ~ 
+0

Oh sakıncası yoksa, anladım! Tamamen çalıştı. Bana verdiğin tüm öneri ve yardım için teşekkür ederim. – JIGEN

+2

+1 Harika yanıt @elnur. Bunu koleksiyonlar doğrulama bölümünde dokümanda görmek harika olurdu. Belki onu özlemişimdir. – Mick

+0

+1, bu aslında kitabın geçerlilik bölümünde daha iyi belgelenmiş olabilir – Rvanlaak

İlgili konular