두 개의 간단한 객체 Purchase
및 Address
을 설정하려고합니다.일대일 위험 - 잡히지 않은 PHP 예외 Symfony Component PropertyAccess Exception NoSuchPropertyException
하나 개 구입 여러 주소 (구매 주소, 청구서 주소)를 가질 수
같은 주소 엔티티에서단순화 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: { }
:
이
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의 모습
구매 클래스의 다음 줄에 오류가 발생합니다.
말 :
어느 재산 "주소"나 방법 중 하나 "getAddress에()", "주소()", "isAddress()", "hasAddress()", "__get()"이 (가) 있고 "X \ Entity \ Purchase"클래스에 공개 액세스 권한이 있습니다.
어느 것이 정확합니까? 속성 address
이없고 그 기존 속성에 대한 방법이 없습니다.
문제가되는 부동산 종류는 addresses
이고 방법은 getAddresses
이지만 문제가 있습니다.
이제 "시스템"(심포니?)이 속성 이름 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(),
));
}
}
을 그리고 인 AddressType은 다음과 같습니다 : 컨트롤러는 다음과 같습니다 돕는
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 질문은 Controller indexAction 및 AddressType ... – caramba