2014-12-28 3 views
1

나는 심포니 2 시작 했어 그리고 난 데이터베이스에서 데이터로 "선택"유형을 표시 싶지만 문제가 :선택 양식이

addAction :

public function addAction() 
{ 
    $categories = new CategoriesAnnonce(); 
    $form = $this->get('form.factory')->create(new AddFormType($categories),$categories); 
    return $this->render('AnnoncesBundle::add.html.twig', array(
     'form' => $form->createView(), 
    )); 
} 

AddFormType. PHP :

<?php 

namespace AnnoncesBundle\Form\Type; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface; 
use Symfony\Component\Validator\Constraints as Assert; 

class AddFormType extends AbstractType 
{ 
    private $cat; 

    public function __construct(CategoriesAnnonce $categories) 
    { 
     $this->cat = $categories->getNomSousCategorie(); 
    } 

    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('titre', 'text') 
      ->add('categories', 'choice', array(
      'choices' => $this->cat, 
     )); 
    } 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'AnnoncesBundle\Form\Model\Add', 
     )); 
    } 

    public function getName() 
    { 
     return 'Add'; 
    } 
} 

?> 

오류 :

Catchable Fatal Error: Argument 1 passed to AnnoncesBundle\Form\Type\AddFormType::__construct() must be an instance of AnnoncesBundle\Form\Type\CategoriesAnnonce, instance of AnnoncesBundle\Entity\CategoriesAnnonce given, called in /Users/jordan/Desktop/www/Lesbonnesaffaires/src/AnnoncesBundle/Controller/DefaultController.php on line 69 and defined 

답변

2

CategoriesAnnonce이 속한 적절한 네임 스페이스 대신 파일에 정의 된 네임 스페이스를 사용합니다. use 문 추가

use AnnoncesBundle\Entity\CategoriesAnnonce

을 OR 같은 FQCN에 타입 힌트를 변경합니다

public function __construct(\AnnoncesBundle\Entity\CategoriesAnnonce, $categories) { 
    //... 
} 

감사의하지만 난 지금 다른 문제가 있습니다

를 양식의 뷰 데이터는 AnnoncesBundle \ Form \ Model \ Add 클래스의 인스턴스가 될 것으로 예상되지만 AnnoncesBundle \ Entity \ CategoriesAnn 클래스의 인스턴스입니다. 일단. "data_class"옵션을 null로 설정하거나 AnnoncesBundle \ Entity \ CategoriesAnnonce 클래스의 인스턴스를 AnnoncesBundle \ Form \ Model \ Add의 인스턴스로 변환하는 뷰 변환기를 추가하여이 오류를 피할 수 있습니다.

당신이 data_class이 AnnoncesBundle\Form\Model\Add로 설정되어 있기 때문에이 문제가 발생 :

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'AnnoncesBundle\Form\Model\Add', 
    )); 
} 

하지만 당신은 내가 당신을 위해 코드를 재 작업 할 필요가 있다고 생각 그것을 AnnoncesBundle\Entity\CategoriesAnnonce

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('titre', 'text') 
     // this cat is an instance of AnnoncesBundle\Entity\CategoriesAnnonce 
     ->add('categories', 'choice', array(
     'choices' => $this->cat, 
    )); 
} 

을 통과하려고하는 이 모든 것. 불행하게도 나는 무엇을 AnnoncesBundle\Form\Model\AddAnnoncesBundle\Entity\CategoriesAnnonce이 무엇인지, 그들이 어떻게 상호 작용하는지 또는 상호 작용해야 하는지를 모르기 때문에 구체적으로 설명 할 수 없다. 하지만 form class을 만들고 사용자 정의 field type을 만드는 것에 대해 혼란스러워하며 클래스 계층 구조를 만드는 방법과 다양한 구성 요소가 수행해야하는 작업에 대해 혼란스러워합니다. forms chapter of the bookcustom field type cookbook entry을 검토합니다. 그런 다음 문제가 있다면 Entity/Model, Form 및 FieldType 클래스의 관련 코드를 사용하여 세부 사항에 대한 새로운 질문을 작성하십시오.

+0

고맙지 만 지금 다른 문제가 있습니다. 양식의보기 데이터는 AnnoncesBundle \ Form \ Model \ Add 클래스의 인스턴스가 될 것으로 예상되지만 AnnoncesBundle \ Entity \ CategoriesAnnonce 클래스의 인스턴스입니다. "data_class"옵션을 null로 설정하거나 AnnoncesBundle \ Entity \ CategoriesAnnonce 클래스의 인스턴스를 AnnoncesBundle \ Form \ Model \ Add의 인스턴스로 변환하는 뷰 변환기를 추가하여이 오류를 피할 수 있습니다. –

+0

@JordanLechevin 내 대답이 약간 업데이트되었지만 실제로 도움이 될만한지 확실하지 않습니다. 귀하의 질문은 당신이 얻고있는 특정 오류에 대해 더 적고 sf2에서 양식 구성 요소가 어떻게 작동하고 Doctrine과 상호 작용하는지에 대해 혼란 스러울 것입니다. – prodigitalson

관련 문제