Symfony 属性或其中一个方法都不存在,并且在类中没有公共访问权限
在表单中保存数据后,我不断收到以下错误: 属性“categories”或其中一个方法 “addCategory()”/“removeCategory()”、“setCategories()”、“categories()”, 类中存在并具有公共访问权限的“\uuuu set()”或“\uuuu call()” “Apw\BlackbullBundle\Entity\Products” 我有5个表:Products、ProductsDesception、Categories、Categories Description和ProductstoCategories。但我不断地得到上面的错误 我有以下表单生成器: 产品类型:Symfony 属性或其中一个方法都不存在,并且在类中没有公共访问权限,symfony,Symfony,在表单中保存数据后,我不断收到以下错误: 属性“categories”或其中一个方法 “addCategory()”/“removeCategory()”、“setCategories()”、“categories()”, 类中存在并具有公共访问权限的“\uuuu set()”或“\uuuu call()” “Apw\BlackbullBundle\Entity\Products” 我有5个表:Products、ProductsDesception、Categories、Categories D
<?php
namespace Apw\BlackbullBundle\Form;
use Apw\BlackbullBundle\Entity\ProductsDescription;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class ProductsType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('productsDescription', 'collection',
array(
'type' => new ProductsDescriptionType(),
'options' => array('data_class' => 'Apw\BlackbullBundle\Entity\ProductsDescription'),
'label' => 'Nome prodotto:'
))
->add('productsQuantity')
->add('productsModel')
->add('productsImage')
->add('productsPrice')
->add('productsDateAvailable', 'date', array(
'input' => 'datetime',
'widget' => 'single_text',))
->add('productsWeight')
->add('productsStatus')
->add('categories', 'entity', array(
'class' => 'ApwBlackbullBundle:CategoriesDescription',
'property' => 'categoriesName',
'empty_value' => 'Scegliere una categoria',
'required' => false,
'label' => 'Crea in:'))
->add('productsDescription', 'collection', array(
'type' => new ProductsDescriptionType(),
'options' => array('data_class' => 'Apw\BlackbullBundle\Entity\ProductsDescription'),
'label' => 'Descrizione prodotto:'))
->add('salva','submit')
->add('azzera','reset')
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Apw\BlackbullBundle\Entity\Products'
));
}
/**
* @return string
*/
public function getName()
{
return 'apw_blackbullbundle_products';
}
}
<?php
namespace Apw\BlackbullBundle\Form;
use Doctrine\ORM\EntityRepository;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class CategoriesType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('categoryDescription', 'collection',
array(
'type' => new CategoriesDescriptionType(),
'allow_add' => true,
'options' => array('data_class' => 'Apw\BlackbullBundle\Entity\CategoriesDescription'),
'by_reference' => false,
))
//->add('categoriesImage', null, array('label'=>'Foto:'))
->add('categoriesStatus', null, array('label'=>'Stato:'))
->add('parentId', 'entity', array(
'class' => 'ApwBlackbullBundle:CategoriesDescription',
'property' => 'categoriesName',
'empty_value' => 'Scegliere una categoria',
'required' => false,
'label' => 'Crea in:'))
->add('salva','submit')
->add('azzera','reset')
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Apw\BlackbullBundle\Entity\Categories',
));
}
/**
* @return string
*/
public function getName()
{
return 'categories';
}
}
<?php
namespace Apw\BlackbullBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* CategoriesDescription
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="Apw\BlackbullBundle\Entity\CategoriesDescriptionRepository")
*/
class CategoriesDescription
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="categories_name", type="string", length=32, nullable=true)
*/
private $categoriesName;
/**
* @ORM\ManyToOne(targetEntity="Categories", inversedBy="categoryDescription")
**/
private $category;
/**
* @ORM\ManyToOne(targetEntity="Languages", inversedBy="categoriesDescription")
* @ORM\JoinColumn(name="languages_id", referencedColumnName="id")
**/
private $languages;
public function __toString() {
return $this->categoriesName;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set categoriesName
*
* @param string $categoriesName
* @return CategoriesDescription
*/
public function setCategoriesName($categoriesName)
{
$this->categoriesName = $categoriesName;
return $this;
}
/**
* Get categoriesName
*
* @return string
*/
public function getCategoriesName()
{
return $this->categoriesName;
}
/**
* Set languages
*
* @param \Apw\BlackbullBundle\Entity\Languages $languages
* @return CategoriesDescription
*/
public function setLanguages(\Apw\BlackbullBundle\Entity\Languages $languages = null)
{
$this->languages = $languages;
return $this;
}
/**
* Get languages
*
* @return \Apw\BlackbullBundle\Entity\Languages
*/
public function getLanguages()
{
return $this->languages;
}
/**
* Set category
*
* @param \Apw\BlackbullBundle\Entity\Categories $category
* @return CategoriesDescription
*/
public function setCategory(\Apw\BlackbullBundle\Entity\Categories $category = null)
{
$this->category = $category;
return $this;
}
/**
* Get category
*
* @return \Apw\BlackbullBundle\Entity\Categories
*/
public function getCategory()
{
return $this->category;
}
}
您的产品表单类型中已将类别设置为ApwBlackbullBundle:CategoriesDescription
:
->add('categories', 'entity', array(
'class' => 'ApwBlackbullBundle:CategoriesDescription', // your problem
'property' => 'categoriesName',
'empty_value' => 'Scegliere una categoria',
'required' => false,
'label' => 'Crea in:'))
但您的产品
实体使用ApwBlackbullBundle:Categories
:
/**
* @ORM\ManyToMany(targetEntity="Categories", inversedBy="products")
* @ORM\JoinTable(name="productstocategories")
*/
private $categories;
/**
* Add categories
*
* @param \Apw\BlackbullBundle\Entity\Categories $categories
* @return Products
*/
public function addCategory(\Apw\BlackbullBundle\Entity\Categories $categories)
{
$this->categories[] = $categories;
return $this;
}
/**
* Remove categories
*
* @param \Apw\BlackbullBundle\Entity\Categories $categories
*/
public function removeCategory(\Apw\BlackbullBundle\Entity\Categories $categories)
{
$this->categories->removeElement($categories);
}
类型提示为\Apw\BlackbullBundle\Entity\Categories
:
/**
* @ORM\ManyToMany(targetEntity="Categories", inversedBy="products")
* @ORM\JoinTable(name="productstocategories")
*/
private $categories;
/**
* Add categories
*
* @param \Apw\BlackbullBundle\Entity\Categories $categories
* @return Products
*/
public function addCategory(\Apw\BlackbullBundle\Entity\Categories $categories)
{
$this->categories[] = $categories;
return $this;
}
/**
* Remove categories
*
* @param \Apw\BlackbullBundle\Entity\Categories $categories
*/
public function removeCategory(\Apw\BlackbullBundle\Entity\Categories $categories)
{
$this->categories->removeElement($categories);
}
这些需要与表单匹配才能正常运行。可能的解决方案是将第一个引用的代码段中的'class'=>'ApwBlackbullBundle:CategoriesDescription'
更改为'class'=>'ApwBlackbullBundle:Categories'
我遇到了类似的问题,并且能够通过添加'multiple'=>TRUE来修复它,如果要使用复选框,还可以选择添加“扩展”=>TRUE
->添加('categories','entity',数组(
'class'=>'ApwBlackbullBundle:CategoriesDescription',
'属性'=>'类别名称',
“空值”=>“分类权杖”,
“必需”=>false,
“多个”=>true,
“label'=>“Crea in:”)
属性categoriesName在CategoriesDescription类中定义。我尝试设置'class'=>'ApwBlackbullBundle:Categories',但错误消息是:属性“categoriesName”或方法“getCategoriesName()”、“categoriesName()”、“isCategoriesName()”、“hasCategoriesName()”、“u get()”均不存在,并且在类“Apw\BlackbullBundle\Entity\Categories”中具有公共访问权限。这是因为在类别
类中没有类别名称
属性。我通常会告诉你做'property'=>'categoriesDescription.categoriesName'
,但是你的categoriesDescription
是多对一的Categories
。您的实体结构一团糟。categoriesName位于CategoriesDescription中,因为它支持多种语言,因此关系为一对多。$如果忘记向setter添加参数,也会发生这种情况。我的setter是一个无用的接口遵从性伪对象,这加剧了问题。很好,因为关系是多个的,“multiple”属性应该定义为“multiple”=>true,可能重复