[英]Symfony entity class seems not to be a managed Doctrine entity
我嘗試創建一個帶有下拉菜單的表單,該菜單包含名為“main_category”的數據庫表的所有條目。
這是我的TemplateUploadType表單:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->setAction('upload')
->setMethod('POST')
->add('service_category', 'entity', array(
'label' => 'tpl_upload_service_category_label',
'class' => '\AppBundle\Entity\MainCategory',
'placeholder' => 'tpl_upload_service_category_placeholder',
'attr' => array(
'required' => 'true',
'class' => 'form-control'
),
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('m')
->orderBy('m.serviceCategoryId', 'ASC');
},
)
)
// button
->add('submit', 'submit', array(
'attr' => array(
'class' => 'btn btn-default'
)
)
);
}
這是我使用doctrine命令行工具創建的“MainCategory”實體:
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* MainCategory
*
* @ORM\Table(name="main_category")
* @ORM\Entity
*/
class MainCategory
{
/**
* @var integer
*
* @ORM\Column(name="service_category_id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $serviceCategoryId;
/**
* @var string
*
* @ORM\Column(name="service_category", type="string", length=50, nullable=false)
*/
private $serviceCategory = '';
/**
* @var string
*
* @ORM\Column(name="main_category", type="string", nullable=false)
*/
private $mainCategory = 'SAP';
/**
* @var string
*
* @ORM\Column(name="comment", type="string", length=255, nullable=true)
*/
private $comment;
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\ManyToMany(targetEntity="Costfactor", inversedBy="scid")
* @ORM\JoinTable(name="category_has_costfactor",
* joinColumns={
* @ORM\JoinColumn(name="scid", referencedColumnName="service_category_id")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="cfid", referencedColumnName="costfactor_id")
* }
* )
*/
private $cfid;
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\ManyToMany(targetEntity="CcRef", inversedBy="serviceCategory")
* @ORM\JoinTable(name="cc_master",
* joinColumns={
* @ORM\JoinColumn(name="service_category_id", referencedColumnName="service_category_id")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="cc_parameter_id", referencedColumnName="cc_parameter_id")
* }
* )
*/
private $ccParameter;
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\ManyToMany(targetEntity="KpiRef", inversedBy="serviceCategory")
* @ORM\JoinTable(name="kpi_master",
* joinColumns={
* @ORM\JoinColumn(name="service_category_id", referencedColumnName="service_category_id")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="kpi_parameter_id", referencedColumnName="kpi_parameter_id")
* }
* )
*/
private $kpiParameter;
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\ManyToMany(targetEntity="SecRef", inversedBy="serviceCategory")
* @ORM\JoinTable(name="sec_master",
* joinColumns={
* @ORM\JoinColumn(name="service_category_id", referencedColumnName="service_category_id")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="sec_parameter_id", referencedColumnName="sec_parameter_id")
* }
* )
*/
private $secParameter;
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\ManyToMany(targetEntity="SlRef", inversedBy="serviceCategory")
* @ORM\JoinTable(name="sl_master",
* joinColumns={
* @ORM\JoinColumn(name="service_category_id", referencedColumnName="service_category_id")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="sl_parameter_id", referencedColumnName="sl_parameter_id")
* }
* )
*/
private $slParameter;
/**
* Constructor
*/
public function __construct()
{
$this->cfid = new \Doctrine\Common\Collections\ArrayCollection();
$this->ccParameter = new \Doctrine\Common\Collections\ArrayCollection();
$this->kpiParameter = new \Doctrine\Common\Collections\ArrayCollection();
$this->secParameter = new \Doctrine\Common\Collections\ArrayCollection();
$this->slParameter = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Get serviceCategoryId
*
* @return integer
*/
public function getServiceCategoryId()
{
return $this->serviceCategoryId;
}
/**
* Set serviceCategory
*
* @param string $serviceCategory
* @return MainCategory
*/
public function setServiceCategory($serviceCategory)
{
$this->serviceCategory = $serviceCategory;
return $this;
}
/**
* Get serviceCategory
*
* @return string
*/
public function getServiceCategory()
{
return $this->serviceCategory;
}
/**
* Set mainCategory
*
* @param string $mainCategory
* @return MainCategory
*/
public function setMainCategory($mainCategory)
{
$this->mainCategory = $mainCategory;
return $this;
}
/**
* Get mainCategory
*
* @return string
*/
public function getMainCategory()
{
return $this->mainCategory;
}
/**
* Set comment
*
* @param string $comment
* @return MainCategory
*/
public function setComment($comment)
{
$this->comment = $comment;
return $this;
}
/**
* Get comment
*
* @return string
*/
public function getComment()
{
return $this->comment;
}
/**
* Add cfid
*
* @param \AppBundle\Entity\Costfactor $cfid
* @return MainCategory
*/
public function addCfid(\AppBundle\Entity\Costfactor $cfid)
{
$this->cfid[] = $cfid;
return $this;
}
/**
* Remove cfid
*
* @param \AppBundle\Entity\Costfactor $cfid
*/
public function removeCfid(\AppBundle\Entity\Costfactor $cfid)
{
$this->cfid->removeElement($cfid);
}
/**
* Get cfid
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getCfid()
{
return $this->cfid;
}
/**
* Add ccParameter
*
* @param \AppBundle\Entity\CcRef $ccParameter
* @return MainCategory
*/
public function addCcParameter(\AppBundle\Entity\CcRef $ccParameter)
{
$this->ccParameter[] = $ccParameter;
return $this;
}
/**
* Remove ccParameter
*
* @param \AppBundle\Entity\CcRef $ccParameter
*/
public function removeCcParameter(\AppBundle\Entity\CcRef $ccParameter)
{
$this->ccParameter->removeElement($ccParameter);
}
/**
* Get ccParameter
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getCcParameter()
{
return $this->ccParameter;
}
/**
* Add kpiParameter
*
* @param \AppBundle\Entity\KpiRef $kpiParameter
* @return MainCategory
*/
public function addKpiParameter(\AppBundle\Entity\KpiRef $kpiParameter)
{
$this->kpiParameter[] = $kpiParameter;
return $this;
}
/**
* Remove kpiParameter
*
* @param \AppBundle\Entity\KpiRef $kpiParameter
*/
public function removeKpiParameter(\AppBundle\Entity\KpiRef $kpiParameter)
{
$this->kpiParameter->removeElement($kpiParameter);
}
/**
* Get kpiParameter
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getKpiParameter()
{
return $this->kpiParameter;
}
/**
* Add secParameter
*
* @param \AppBundle\Entity\SecRef $secParameter
* @return MainCategory
*/
public function addSecParameter(\AppBundle\Entity\SecRef $secParameter)
{
$this->secParameter[] = $secParameter;
return $this;
}
/**
* Remove secParameter
*
* @param \AppBundle\Entity\SecRef $secParameter
*/
public function removeSecParameter(\AppBundle\Entity\SecRef $secParameter)
{
$this->secParameter->removeElement($secParameter);
}
/**
* Get secParameter
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getSecParameter()
{
return $this->secParameter;
}
/**
* Add slParameter
*
* @param \AppBundle\Entity\SlRef $slParameter
* @return MainCategory
*/
public function addSlParameter(\AppBundle\Entity\SlRef $slParameter)
{
$this->slParameter[] = $slParameter;
return $this;
}
/**
* Remove slParameter
*
* @param \AppBundle\Entity\SlRef $slParameter
*/
public function removeSlParameter(\AppBundle\Entity\SlRef $slParameter)
{
$this->slParameter->removeElement($slParameter);
}
/**
* Get slParameter
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getSlParameter()
{
return $this->slParameter;
}
}
由於使用上面的代碼我收到錯誤消息:
類“\\ AppBundle \\ Entity \\ MainCategory”似乎不是托管的Doctrine實體。 你忘記了映射嗎?
我究竟做錯了什么? 如果您需要更多信息,請告訴我。
我認為問題出在這一行:
'class' => '\AppBundle\Entity\MainCategory',
刪除第一個尾部斜杠:
'class' => 'AppBundle\Entity\MainCategory',
我找到了答案,感謝@malcolm
首先,我更改了我的TemplateUploadType表單,因此在行的開頭沒有斜杠:
'class' => 'AppBundle\Entity\MainCategory',
這導致另一個錯誤稱為“可捕獲的致命錯誤:類AppBundle \\ Entity \\ MainCategory的對象無法轉換為字符串” 。 調查這個我在這篇博文中找到了答案。
基本上我不得不覆蓋實體類中的__toString()函數。
public function __toString()
{
return strval($this->serviceCategory);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.