동일한 양식을 사용하는 두 가지 작업 (신규 및 수정)이 있습니다. 양식은 새 항목 (MyBundle \ Entity \ Project)을 만들거나 기존 항목을 편집해야합니다. 각 프로젝트는 하나의 팀 (MyBundle \ Entity \ Team)에 할당 될 수 있으며 한 팀은 여러 프로젝트를 보유 할 수 있습니다.Symfony2 : 폼의 뷰 데이터는 엔티티의 인스턴스가 될 것으로 예상되지만 배열입니다.
엔티티/Project.php :
/* ... */
/**
* @var Team
*
* @ORM\ManyToOne(targetEntity="Team", inversedBy="projects")
* @ORM\JoinColumn(name="team", referencedColumnName="id")
*/
private $team;
/* ... */
엔티티/Team.php :
/* ... */
/**
* @var ArrayCollection
*
* @ORM\OneToMany(targetEntity="Project", mappedBy="team")
* @ORM\OrderBy({"title" = "ASC"})
**/
private $projects;
/* ... */
컨트롤러/ProjectController.php :
public function newAction()
{
$project = new Project();
$form = $this->createForm(
new new ProjectType($project),
array(
'action' => $this->generateUrl('mybundle_project_create'),
)
);
/* ... */
}
public function editAction($id, Request $request)
{
/** @var \Doctrine\ORM\EntityManager $em */
$em = $this->getDoctrine()->getManager();
$project = $em->getRepository('MyBundle:Project')->findOneById($id);
$form = $this->createForm(
new ProjectType($project),
$project,
array(
'action' => $this->generateUrl('mybundle_project_edit', array('id' => $project->getId())),
)
);
폼/ProjectType.php :
private $project;
public function __construct($project = null)
{
$this->project = $project;
}
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
/* ... */
->add('team', 'entity', array(
'class' => MyBundle:Team',
'property' => 'name',
'label' => 'Team',
'query_builder' => function (TeamRepository $er) {
return $er->createQueryBuilder('e')
->orderBy('e.name', 'ASC');
},
'expanded' => false,
'multiple' => false,
'required' => false
))
->add('save', 'submit');
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(
array(
'data_class' => 'MyBundle\Entity\Project',
)
);
}
/**
* @return string
*/
public function getName()
{
return 'mybundle_project';
}
편집 양식에 액세스 할 때 드롭 다운에 할당 된 팀이 올바르게 표시됩니다. 나는 새 프로젝트를 만들려고 할 때, 그것은 나에게 다음과 같은 오류 메시지를 제공합니다 :
형태의 뷰 데이터는 클래스 MyBundle \ 법인 \ 프로젝트의 인스턴스가 될 것으로 예상하지만, N (A입니다) 배열. "data_class"옵션을 null로 설정하거나 MyBundle \ Entity \ Project의 인스턴스로 (n) 배열을 변환하는 뷰 변환기를 추가하여 오류를 피할 수 있습니다.
이의 일을하지 않았다 같은 오류 메시지로해야한다 전에. 편집 된 질문을 참조하십시오. – cnmicha
> 3 대신 2 개의 매개 변수를 사용하는 것 @gamboa 1 매개 변수 만 볼 수 있습니다 ($ project) – cnmicha
내 잘못, 너무 깨달았습니다. 고맙습니다! – cnmicha