1 回答

TA貢獻1818條經(jīng)驗 獲得超7個贊
主要問題是它product_id不是一個實體,所以formbuilder用EntityType::class. 您需要正確定義(如文檔中所述)您與對象的 ManyToOne 關(guān)系
在產(chǎn)品方面:
/**
* @ORM\Entity(repositoryClass="App\Repository\ProductRepository")
*/
class Product
{
// usual stuff
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="product", cascade={"persist"})
*/
private $preorders;
}
在預(yù)訂方面:
/**
* @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;
}
}
然后在您的表單構(gòu)建器中,您將使用 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 關(guān)注
- 116 瀏覽
添加回答
舉報