에서 드롭 다운을받을 양식을 사용하면 사용 가능한 모든 featureTypes의 드롭 다운이 표시됩니다. 하나를 선택하여 제출하고 싶습니다. 심포니 FormType, 내가 featureTypes의 ArrayCollection에 (ManytoMany) 일류 상품으로 내 엔티티 제품을 가지고있는 ArrayCollection
나는 나의 addFeatureTypeToProductType에서 다음과 같이 그것을 시도 :public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('featureTypes', EntityType::class, [
'class' => FeatureType::class,
'choice_label' => 'name',
])
->add('submit', SubmitType::class)
->getForm();
}
출력이 가능한 모든 FeatureTypes와 드롭 다운입니다. 하지만 선택한 featureType을 제출하면 오류가 발생합니다 : "속성 'featureType'에 대한 액세스 유형을 결정할 수 없습니다."
은 그 때 나는이 방법으로 시도 :public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('featureTypes', CollectionType::class, [
'entry_type' => FeatureType::class,
'allow_add' => true,
])
->add('submit', SubmitType::class)
->getForm();
}
을하지만이
내 컨트롤러 작동하지 않습니다 S
편집 : 내 영어
public function addFeatureTypeAction(Request $request, Product $product)
{
$form = $this->createForm(AddFeatureTypeToProductType::class, $product, [
'action' => $this->generateUrl('admin_products_add_featureTypes', [
'product' => $product->getId()
])
]);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()) {
$featureType = $form->get('featureTypes');
$product->addFeatureTypes($featureType);
$em = $this->getDoctrine()->getManager();
$em->persist($product);
$em->flush();
return $this->redirectToRoute('admin_products_list_all');
}
return [
'form' => $form->createView()
];
}
미안 여기 있습니다 내 가수/제거제 및 세터/게터 :
/**
* @return FeatureType
*/
public function getFeatureTypes()
{
return $this->featureTypes;
}
/**
* @param FeatureType $featureTypes
*/
public function setFeatureTypes($featureTypes)
{
$this->featureTypes = $featureTypes;
}
/**
* Add new FeatureType
*
* @param FeatureType $featureType
*
* @return Product
*/
public function addFeatureTypes($featureType)
{
if (!$this->featureTypes->contains($featureType)) {
$this->featureTypes->add($featureType);
}
return $this;
}
/**
* @param FeatureType $featureType
*
* @return Product
*/
public function removeFeatureTypes($featureType)
{
if ($this->featureTypes->contains($featureType)) {
$this->featureTypes->remove($featureType);
}
return $this;
}
편집 2 : 내 양식의 첫 번째 방법으로 다시 시도했습니다. 하지만 지금은 새로운 오류가 발생합니다. 내 엔터티 "FeatureType"이 contains 메서드를 알지 못하는 이유를 알지 못합니다. Symfony Arraycollection을 사용합니다.
오류 : 클래스 "AppBundle \ Entity \ FeatureType"의 "contains"라는 정의되지 않은 메서드를 호출하려고했습니다.
디버깅 해주기
임 진일보 addFeatureTypes (featureType을 $)에서 멈춘다. 이제 collectionType을 사용합니다.
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('featureTypes', CollectionType::class, [
'entry_type' => FeatureTypeType::class,
'allow_add' => true,
])
->add('submit', SubmitType::class)
->getForm();
}
내 프런트 엔드 양식에는 내 제품이 이미 갖고있는 모든 featureTypes가 표시됩니다. 그러나 나는 모른다. 새로운 것을 추가하는 방법 ...
)' 폼 타입의'buildForm()'만난다. 벽돌 상자? 'Product' 엔티티의'$ featureTypes' 속성에 대한 getter 및 setter/adder 메서드가 있습니까? – xabbuh
음,이 방법으로 배웠습니다 (getForm()). 그리고 모든 양식에서 작동합니다. 예, getter/setter 및 adder/remover가 있습니다. 내 질문에 추가했습니다. –
죄송합니다. @xabbuh와 (과) 연결을 잊어 버렸습니다. –