Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 属性或其中一个方法都不存在,并且在类中没有公共访问权限_Symfony - Fatal编程技术网

Symfony 属性或其中一个方法都不存在,并且在类中没有公共访问权限

Symfony 属性或其中一个方法都不存在,并且在类中没有公共访问权限,symfony,Symfony,在表单中保存数据后,我不断收到以下错误: 属性“categories”或其中一个方法 “addCategory()”/“removeCategory()”、“setCategories()”、“categories()”, 类中存在并具有公共访问权限的“\uuuu set()”或“\uuuu call()” “Apw\BlackbullBundle\Entity\Products” 我有5个表:Products、ProductsDesception、Categories、Categories D

在表单中保存数据后,我不断收到以下错误:

属性“categories”或其中一个方法 “addCategory()”/“removeCategory()”、“setCategories()”、“categories()”, 类中存在并具有公共访问权限的“\uuuu set()”或“\uuuu call()” “Apw\BlackbullBundle\Entity\Products”

我有5个表:Products、ProductsDesception、Categories、Categories Description和ProductstoCategories。但我不断地得到上面的错误

我有以下表单生成器:

产品类型:

<?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,可能重复