我有2个“简单”实体,我想做classical form embedding
但我有这个错误:“属性”itemcode“和方法”getItemcode()“,”itemcode()“,”isItemcode()“,”hasItemcode()“,”__ get()“都不存在“NWA \ ItemSelectorBundle \ Entity \ ItemSelector”类中的公共访问。“
我看过很多有这个错误的帖子,但都没有提供解决方案
在我有getItemCode()的实体中,为什么它会公开? 我的建筑有什么问题?
提前谢谢
这是我的实体(与故障属性相关的部分)
class ItemSelector
{
/**
* @var Items[]
*
* @ORM\OneToMany(targetEntity="NWA\ItemSelectorBundle\Entity\Item", mappedBy="itemselector", cascade={"all"})
*/
protected $items;
/**
* Class constructor
*/
public function __construct()
{
$this->items = new ArrayCollection();
}
/**
* Add item
*
* @param \NWA\ItemSelectorBundle\Entity\Item $item
*
* @return ItemSelector
*/
public function addItem(\NWA\ItemSelectorBundle\Entity\Item $item)
{
$this->items[] = $item;
//$item->setItemselector($this);
return $this;
}
/**
* Remove item
*
* @param \NWA\ItemSelectorBundle\Entity\Item $item
*/
public function removeItem(\NWA\ItemSelectorBundle\Entity\Item $item)
{
$this->items->removeElement($item);
}
/**
* Get items
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getItems()
{
return $this->items;
}
}
和
class Item
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="itemcode", type="string", length=255)
*/
protected $itemcode;
/**
* @var ItemSelector
*
* @ORM\ManyToOne(targetEntity="NWA\ItemSelectorBundle\Entity\ItemSelector", inversedBy="items")
* @ORM\JoinColumn(name="itemselector_id", referencedColumnName="id")
*/
protected $itemselector;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set itemcode
*
* @param string $itemcode
*
* @return Item
*/
public function setItemcode($itemcode)
{
$this->itemcode = $itemcode;
return $this;
}
/**
* Get itemcode
*
* @return string
*/
public function getItemcode()
{
return $this->itemcode;
}
/**
* Set itemselector
*
* @param \NWA\ItemSelectorBundle\Entity\ItemSelector $itemselector
*
* @return Item
*/
public function setItemselector(\NWA\ItemSelectorBundle\Entity\ItemSelector $itemselector = null)
{
$this->itemselector = $itemselector;
return $this;
}
/**
* Get itemselector
*
* @return \NWA\ItemSelectorBundle\Entity\ItemSelector
*/
public function getItemselector()
{
return $this->itemselector;
}
}
然后是Form构造函数
class ItemSelectorType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add(
'itemcode', 'collection', array(
'type' => new ItemType(),
'prototype' => true,
'allow_add' => true,
'allow_delete' => true
)
);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'NWA\ItemSelectorBundle\Entity\ItemSelector',
'translation_domain' => 'resource'
));
}
/**
* @return string
*/
public function getName()
{
return 'nwa_itemselector';
}
}
和
class ItemType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add(
'itemcode', 'text', array(
'label' => 'Code'
)
);
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'NWA\ItemSelectorBundle\Entity\Item'
));
}
/**
* @return string
*/
public function getName()
{
return 'nwa_itemselectorbundle_item';
}
}
最后在Controller中调用
public function chooseAction(Request $request, ItemSelector $itemSelector)
{
$form = $this->get('form.factory')
->create(new ItemSelectorType(), $itemSelector);
$form->handleRequest($request);
if ($form->isValid()) {
}
return array(
'_resource' => $itemSelector,
'form' => $form->createView(),
);
}
答案 0 :(得分:2)
您可能需要将字段名称itemcode重命名为ItemSelectorType中的项目。
->add(
'items', 'collection', array(
'type' => new ItemType(),
'prototype' => true,
'allow_add' => true,
'allow_delete' => true
)
);