1 回答

TA贡献1818条经验 获得超7个赞
主要问题是它product_id不是一个实体,所以formbuilder用EntityType::class. 您需要正确定义(如文档中所述)您与对象的 ManyToOne 关系
在产品方面:
/**
* @ORM\Entity(repositoryClass="App\Repository\ProductRepository")
*/
class Product
{
// usual stuff
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="product", cascade={"persist"})
*/
private $preorders;
}
在预订方面:
/**
* @ORM\Entity(repositoryClass="App\Repository\ProductRepository")
*/
class Product
{
// usual stuff
/**
* @ORM\OneToMany(targetEntity="App\Entity\Product", mappedBy="preorders")
*/
private $product;
}
在您的 formBuilder 中,product将由entityEntityType::class
编辑
如果您product是 ORM 未映射的遗留类,那么您可以使用dataTransformer帮助您的 formBuilder 识别遗留实体。
namespace App\DataTransformer;
class ProductToIdTransformer implements DataTransformerInterface
{
public function transform($product)
{
if (null === $product) {
return '';
}
return $product->getId();
}
public function reverseTransform($product_id)
{
if (!$product_id){
return;
}
//your db logic to retrieve the product
if (null === $field){
throw new TransformationFailedException(sprintf("the product '%s' does not exist!", $product_id));
}
return $product;
}
}
然后在您的表单构建器中,您将使用 aCollectionType代替:
$preorderForm = $this->createFormBuilder($preorder)
->add('email', EmailType::class)
->add('product', CollectionType::class, [
'class' => Product::class,
//some logic to adapt the different choices to your needs
])
;
$preorderForm
->get('product')
->addModelTransformer(ProductToIdTransformer::class)
;
$preorderForm = $preorderForm->getForm();
- 1 回答
- 0 关注
- 105 浏览
添加回答
举报