属性“ dispositif”和方法之一

时间:2019-07-03 10:23:39

标签: symfony

在控制器中,我创建一个表单:

$em = $this->getDoctrine()->getManager();

$formProjetSearch = $this->createForm(EgwProjetSearchType::class, $em, [
    'em' => $this->getDoctrine()->getManager(),
]);

在我的EgwProjetSearchType中,我有:

$builder->add('dispositif', 'entity', array(
  'class'   => 'LeaPrestaBundle:EgwDispositif', 
  'property'  => 'nomDispositif',
  'label'   => 'nomDispositif',
  'required'  => true,
  'empty_value' => '',
  'query_builder' => function(EntityRepository $er) 
  {
    return $er->createQueryBuilder('d')
      ->where('d.isActive = :isActive')
      ->setParameter('isActive', 1)
      ->orderBy('d.nomDispositif','ASC');
  },
)); 

我有这个错误:

  

属性“ dispositif”或方法“ getDispositif()”,“ dispositif()”,“ isDispositif()”,“ hasDispositif()”,“ __ get()”都不存在并且在类中具有公共访问权限“ Doctrine \ ORM \ EntityManager”。

尽管如此,该实体仍然存在:

<?php

namespace Lea\PrestaBundle\Entity;

use Doctrine\Common\Collections\ArrayCollection;

use Doctrine\ORM\Mapping as ORM;

/**
 * Lea\PrestaBundle\Entity\EgwDispositif
 *
 * @ORM\Table(name="egw_dispositif")
 * @ORM\Entity
 */
class EgwDispositif
{
  /**
   * @var integer $idDispositif
   *
   * @ORM\Column(name="id_dispositif", type="integer", nullable=false)
   * @ORM\Id
   * @ORM\GeneratedValue(strategy="IDENTITY")
   */
  private $idDispositif;

  /**
  * @ORM\ManyToOne(targetEntity="EgwTypePrestation", inversedBy="dispositifs")
  * @ORM\JoinColumn(name="id_type_prestation", referencedColumnName="id")
  */
  private $idTypePrestation;

ETC ...

感谢您的帮助!

请为您的消息打个招呼,但是,我只想在列表框中以实体的形式显示:我使用类型EgwProjetSearchType,我添加了一个来自实体EgwDispositif(存在)的字段“ dispositif”,并返回消息是:

Neither the property "dispositif" nor one of the methods "getDispositif()", "dispositif()", "isDispositif()", "hasDispositif()", "__get()" exis``t and have public access in class "Doctrine\ORM\EntityManager"

所以这不是以EgwProjetSearchType形式传递的参数EM的问题:Symfony说“该实体不存在”。...

我不必通过EwgDispositif?不是Symfony 2中的cas:我有:

$formProjetSearch = $this->createForm(new EgwProjetSearchType($this- 
  

getDoctrine()-> getManager()));

这在3.4中不再起作用。 所以我更改了代码:

$formProjetSearch = $this->createForm(EgwProjetSearchType::class, $em, [
'em' => $this->getDoctrine()->getManager(),
]);

1 个答案:

答案 0 :(得分:0)

在您的实体中,您需要定义您的获取器和设置器。您的实体类是私有的,因此您必须定义公共获取器和设置器才能访问私有对象。

https://symfony.com/doc/current/doctrine.html