試圖設置兩個簡單對象Purchase
和Address
。一對多關鍵 - 未捕獲的PHP異常Symfony Component PropertyAccess Exception NoSuchPropertyException
一次購買可以有多個地址(購買地址,發票地址)
從地址實體簡化ORM的樣子:
X\Entity\Address:
repositoryClass: X\Repository\AddressRepository
type: entity
manyToOne:
purchase:
targetEntity: Purchase
inversedBy: addresses
joinColumn:
name: purchase_id
referencedColumnName: id
id:
id:
type: integer
id: true
generator:
strategy: AUTO
fields:
firstname:
type: string
length: 255
email:
type: string
length: 255
lifecycleCallbacks: { }
從採購實體
簡化ORM的樣子:
X\Entity\Purchase:
repositoryClass: X\Repository\PurchaseRepository
type: entity
oneToMany:
addresses:
targetEntity: Address
mappedBy: purchase
id:
id:
type: integer
id: true
generator:
strategy: AUTO
fields:
quantity:
type: integer
orderedAt:
type: datetime
toBeDeliveredAt:
type: datetime
lifecycleCallbacks: { }
現在這些來自採購類的產品線會給我出錯
說:
無論屬性 「地址」,也不是方法之一 「的getAddress()」, 「地址()」, 「isAddress()」, 「hasAddress()」, 「__get()」存在並且在類「X \ Entity \ Purchase」中具有公共訪問權限 。
這是絕對正確的,沒有財產address
,並沒有任何方法,該非現有財產。
問題是種屬性名稱是addresses
,有一種方法getAddresses
但有些出錯。
現在的問題是爲什麼是「系統」(symfony?)搜索屬性名稱address
?當然,我該如何解決這個問題?在表單提交時
更新
錯誤。該控制器是這樣的:
class DefaultController extends Controller
{
public function indexAction(Request $request)
{
$purchase = new Purchase();
$form = $this->createFormBuilder($purchase)
->add('address', AddressType::class)
->add('quantity', IntegerType::class)
->add('toBeDeliveredAt', DateType::class)
->add('comment', TextareaType::class)
->add('save', SubmitType::class, array('label' => 'Submit'))
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($purchase);
$em->flush();
}
return $this->render('X:Default:index.html.twig', array(
'form' => $form->createView(),
));
}
}
而且地址類型如下:
class AddressType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('firstname', TextType::class)
->add('email', EmailType::class);
}
}
感謝您的幫助!
如果需要整個採購類看起來是這樣的:
<?php
namespace X\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* Purchase
*/
class Purchase
{
/**
* @var int
*/
private $id;
/**
* @var int
*/
private $quantity;
/**
* @var \DateTime
*/
private $orderedAt;
/**
* @var \DateTime
*/
private $toBeDeliveredAt;
/**
* @var bool
*/
private $delivered;
/**
* @var \DateTime
*/
private $deliveredAt;
/**
* @var bool
*/
private $payd;
/**
* @var \DateTime
*/
private $paydAt;
/**
* @var string
*/
private $comment;
/**
* @var \Doctrine\Common\Collections\Collection
*/
private $addresses;
/**
*
*/
public function __construct()
{
$this->addresses = new ArrayCollection();
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set quantity
*
* @param integer $quantity
* @return Purchase
*/
public function setQuantity($quantity)
{
$this->quantity = $quantity;
return $this;
}
/**
* Get quantity
*
* @return integer
*/
public function getQuantity()
{
return $this->quantity;
}
/**
* Set orderedAt
*
* @param \DateTime $orderedAt
* @return Purchase
*/
public function setOrderedAt($orderedAt)
{
$this->orderedAt = $orderedAt;
return $this;
}
/**
* Get orderedAt
*
* @return \DateTime
*/
public function getOrderedAt()
{
return $this->orderedAt;
}
/**
* @param \DateTime $toBeDeliveredAt
*/
public function setToBeDeliveredAt($toBeDeliveredAt)
{
$this->toBeDeliveredAt = $toBeDeliveredAt;
}
/**
* @return \DateTime
*/
public function getToBeDeliveredAt()
{
return $this->toBeDeliveredAt;
}
/**
* @param Address $address
* @return Address
*/
public function addAddress(Address $address)
{
$this->addresses[] = $address;
if($address->getPurchase() !== $this) {
$address->setPurchase($this);
}
return $this;
}
/**
* @return \Doctrine\Common\Collections\Collection
*/
public function getAddresses()
{
return $this->addresses;
}
}
當你有這個錯誤? – DOZ
@DOZ在表單提交中,將包括問題中的部分 – caramba
@DOZ問題更新與控制器indexAction和AddressType ... – caramba