Symfony用户注册并添加地址



我想创建一个表单来注册用户及其地址(帐单/送货( 我的表单包含用户实体和两个地址(帐单/送货(

在我的用户实体中,我想保存许多地址,用户保存(更改购物车中的地址(,但默认情况下保留地址(账单/运输(

这是我的用户实体

class User implements UserInterface, Serializable{
/**
* @ORMId()
* @ORMGeneratedValue()
* @ORMColumn(type="integer")
*/
private $id;
/**
* @ORMColumn(type="string", length=255)
*/
private $username;
/**
* @ORMOneToMany(targetEntity="AppEntityUserAddress", mappedBy="user", orphanRemoval=true)
*/
private $addresses;
/**
* @ORMOneToOne(targetEntity="AppEntityUserAddress", cascade={"persist", "remove"})
*/
private $billingAddress;
/**
* @ORMOneToOne(targetEntity="AppEntityUserAddress", cascade={"persist", "remove"})
*/
private $deliveryAddress;
}

这是我的用户地址实体:

class UserAddress{
/**
* @ORMId()
* @ORMGeneratedValue()
* @ORMColumn(type="integer")
*/
private $id;
/**
* @ORMManyToOne(targetEntity="AppEntityUser", inversedBy="addresses")
* @ORMJoinColumn(nullable=false)
*/
private $user;
}

这是我的用户注册类型

$builder
->add('username')
->add('billingAddress', RegistrationAddressType::class, [
'label'=>'billing Address',
'required'  => true,
])
->add('deliveryAddress', RegistrationAddressType::class, [
'label'=>'delivery Address',
'required'  => false,
])
;

我的表格完美运行,我拥有所需的所有字段。 但是在这种情况下,当我创建一个新用户时,我在address->user上出现错误,因为它为空。

我如何创建一个用户,他的地址在一个表格中? 如何检查用户是否检查使用相同的地址?并将user->setDeliveryAddress = billingAddress->getID()设置为不重复输入用户名?

非常感谢对我的帮助

在多对一问题上,您可以尝试在地址设置器中添加如下内容:

public function setBillingAddress(?UserAddress $address): self
{
$this->billingAddress = $address->setUser($this);
return $this;
}

和您的表单地址字段选项'by_reference' => false.

帐单和送货地址呢,您都有一对一的关系,如果用户的地址相同并且表单中的两个字段都将被填写,则应删除送货地址以避免重复。您可以检查地址是否与Symfony表单或原则预提交事件匹配。以及您在用户实体中的送货地址获取者 应如下所示:

public function getDeliveryAddress(): UserAddress
{
if (!empty($this->deliveryAddress)) {
return $this->deliveryAddress;
}
return $this->billingAddress;
}

最新更新