Symfony表单报错:无法确定Artikel类bestelserie属性的访问类型
解决"无法确定AppBundle\Entity\Artikel类中属性'bestelserie'的访问类型"错误
这个错误的核心原因很明确:你的Artikel实体类里的bestelserie属性只定义了私有变量,但没有提供对应的getter和setter方法,Doctrine无法通过反射获取这个属性的访问方式,所以抛出了这个错误。除此之外,你的实体类里还有其他几个小问题,我一起帮你梳理修复:
1. 为bestelserie添加getter和setter方法
在Artikel类的末尾添加以下代码:
/** * Set bestelserie * * @param integer $bestelserie * * @return Artikel */ public function setBestelserie($bestelserie) { $this->bestelserie = $bestelserie; return $this; } /** * Get bestelserie * * @return integer */ public function getBestelserie() { return $this->bestelserie; }
2. 修复实体类里的其他错误
(1)重复的inkoopprijs注解
你在实体里定义了两个inkoopprijs的注解,其中第二个是错误的,同时magazijnlocatie的注解列名也写错了,一起修复:
// 替换原来的magazijnlocatie和inkoopprijs定义 /** * @var string * * @ORM\Column(name="magazijnlocatie", type="string", length=255, nullable=true) */ private $magazijnlocatie; /** * @var float * * @ORM\Column(name="inkoopprijs", type="decimal", precision=10, scale=2, nullable=true) */ private $inkoopprijs;
(注:采购价格用decimal类型比integer更合适,如果你确实需要整数类型,可以改成type="integer")
(2)属性方法的大小写不一致
vervangendeArtikel的setter/getter方法名写错了,应该是setVervangendeArtikel和getVervangendeArtikel(首字母大写),而不是setVervangendeartikel和getVervangendeartikelminimumVoorraad的setter方法名应该是setMinimumVoorraad,而不是setMinimumvoorraad
(3)缺少voorraadaantal的getter/setter
同样,voorraadaantal属性也没有对应的访问方法,需要补充:
/** * Set voorraadaantal * * @param integer $voorraadaantal * * @return Artikel */ public function setVoorraadaantal($voorraadaantal) { $this->voorraadaantal = $voorraadaantal; return $this; } /** * Get voorraadaantal * * @return integer */ public function getVoorraadaantal() { return $this->voorraadaantal; }
3. 验证修复后的实体
修复完成后,你可以运行Doctrine的校验命令来确认实体映射是否正确:
php bin/console doctrine:schema:validate
如果输出[OK] The mapping files are correct.和[OK] The database schema is in sync with the mapping files.,说明实体已经没有问题了。
最后,确保你的ArtikelType表单类里的字段和实体属性一一对应,没有拼写错误,这样表单提交时就能正确映射到实体了。
内容的提问来源于stack exchange,提问作者Mr J.
相关产品推荐
相关产品推荐

