ReflectionException в JMS

Я разрабатываю простое приложение в symfony для изучения symfony. У него есть термины, примеры сущностей. TermExamples - еще одна сущность, еще одно право, которое представляет собой таблицу сопоставления между термином и примерами. Все в порядке, но когда я пытаюсь сериализовать с помощью сериализатора JMS , Я получаю исключение Reflection Это мои объекты

Срок

/**
 * Term
 *
 * @ORM\Table(name="terms")
 * @ORM\Entity
 */
class Term
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="termName", type="string", length=255)
     */
    private $termName;

    /**
     * @var string
     *
     * @ORM\Column(name="description", type="string", length=2000)
     */
    private $description;

    /**
     * @var string
     *
     * @ORM\Column(name="mnemonic", type="string", length=2000)
     */
    private $mnemonic;

    /**
     * @var ArrayCollection
     *
     * @ORM\OneToMany(targetEntity="RelatedTerm",
     *                mappedBy="term1",cascade={"persist"})
     */
    private $relatedTerms;

    /**
     * @var ArrayCollection
     *
     * @ORM\OneToMany(targetEntity="TermExample",
     *                mappedBy="term",cascade={"persist"})
     */
    private $termExamples;


    public function __construct()
    {
      $this->relatedTerms = new ArrayCollection();
      $this->termExamples = new ArrayCollection();
    }
    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Get Related Terms
     */
    public function getRelatedTerms()
    {
      return $this->relatedTerms ;
    }

    /**
     * Add related term
     */
    public function addRelatedTerm($relatedTerm)
    {
        $this->relatedTerms[] = $relatedTerm;
    }

    /**
     * Clear related Terms
     */
    public function clearRelatedTerms()
    {
        $this->relatedTerms->clear();
    }

    /**
     * Remove a related Term
     */
    public function removeRelatedTerm($relatedTerm)
    {
        $this->relatedTerms->removeElement($relatedTerm);
    }

    /**
     * Get Term Examples
     */
    public function getTermExamples()
    {
      return $this->termExamples ;
    }

    /**
     * Add term example
     */
    public function addTermExample($termExample)
    {
        $this->termExamples[] = $termExample;
    }

    /**
     * Clear term examples
     */
    public function clearTermExamples()
    {
        $this->termExamples->clear() ;
    }

    /**
     * Remove a Term Example
     */
    public function removeTermExample($termExample)
    {
        $this->termExamples->removeElement($termExample);
    }

    /**
     * Set termName
     *
     * @param string $termName
     * @return Term
     */
    public function setTermName($termName)
    {
        $this->termName = $termName;

        return $this;
    }

    /**
     * Get termName
     *
     * @return string
     */
    public function getTermName()
    {
        return $this->termName;
    }

    /**
     * Set description
     *
     * @param string $description
     * @return Term
     */
    public function setDescription($description)
    {
        $this->description = $description;

        return $this;
    }

    /**
     * Get description
     *
     * @return string
     */
    public function getDescription()
    {
        return $this->description;
    }

    /**
     * Set mnemonic
     *
     * @param string $mnemonic
     * @return Term
     */
    public function setMnemonic($mnemonic)
    {
        $this->mnemonic = $mnemonic;

        return $this;
    }

    /**
     * Get mnemonic
     *
     * @return string
     */
    public function getMnemonic()
    {
        return $this->mnemonic;
    }



}

Пример

/**
 * Example
 *
 * @ORM\Table(name="examples")
 * @ORM\Entity
 */
class Example
{


  /**
   * @var integer
   *
   * @ORM\Column(name="id", type="integer")
   * @ORM\Id
   * @ORM\GeneratedValue(strategy="AUTO")
   */
  private $id;

  /**
   * @var string
   *
   * @ORM\Column(name="example_sentence", type="string")
   */
  private $exampleSentence;


  /**
   * @var term
   *
   * @ORM\OneToMany(targetEntity="TermExample",
   *                mappedBy="example")
   */
  private $termExamples;


  /**
   * Get id
   *
   * @return integer
   */
  public function getId()
  {
      return $this->id;
  }

  /**
   * Get ExampleSentence
   *
   * @return string
   */
  public function getExampleSentence()
  {
    return $this->exampleSentence;
  }

  /**
   * Set Example sentence
   *
   * @param string $exampleSentence
   */
   public function setExampleSentence($exampleSentence)
   {
     $this->exampleSentence = $exampleSentence;

     return $this;
   }

}

 ?>

TermExample

/**
 * TermExample
 *
 * @ORM\Table(name="term_examples")
 * @ORM\Entity
 */
class TermExample
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="Term",
     *                inversedBy="termExamples",
     *                cascade={"persist"})
     */
    private $term;

    /**
     * @ORM\ManyToOne(targetEntity="Example",
     *                inversedBy="termExamples",
     *                cascade={"persist"})
     */
    private $example;

    /**
     * @var string
     *
     * @ORM\Column(name="pos",nullable=true)
     */
    private $pos = "NO POS";

    //public $exampleSentence;


    public function __construct()
    {

    }
    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Get Term
     *
     * @return Term
     */
    public function getTerm()
    {
      return $this->term ;
    }

    /**
     * Set Term
     * @param Term $term
     *
     * @return TermExample
     */
    public function setTerm($term)
    {
        $this->term = $term;
        $term->addTermExample($this);
    }

    /**
     * Get Example
     *
     * @return Example
     */
    public function getExample()
    {
      return $this->example ;
    }

    /**
     * Set Example
     *
     * @return TermExample
     */
    public function setExample($example)
    {
        $this->example = $example;
    }

    /**
     * Get pos
     *
     * @return string
     */
    public function getPos()
    {
      return $this->pos ;
    }

    /**
     * Set pos
     *
     * @param string $pos -Parts of speech
     */
    public function setPos($pos)
    {
        $this->pos = $pos;
    }

}

Когда я пытаюсь добавить термин с примером предложения, все идет нормально в базу данных, но когда я пытаюсь сериализовать термин, он показывает мне ошибку

"message": "Property Madhuri\\TermsBundle\\Entity\\TermExample::$exampleSentence does not exist",
                "class": "ReflectionException",
                "trace": [
                    {
                        "namespace": "",
                        "short_class": "",
                        "class": "",
                        "type": "",
                        "function": "",
                        "file": "/Users/madhuripalagummi/Documents/Dictionary/vendor/jms/metadata/src/Metadata/PropertyMetadata.php",
                        "line": 75,
                        "args": []
                    },

Я попытался очистить метаданные кеша доктрины, но все равно не работал. И когда я добавил поле $exampleSentence в сущность TermExample, это сработало, но почему должно быть $exampleSentence в TermExample? Кто-нибудь может мне помочь, пожалуйста!


person user3425344    schedule 09.08.2015    source источник
comment
@JohnNoel Спасибо, сработало. Можете добавить в качестве ответа?   -  person user3425344    schedule 15.08.2015
comment
Рад, что помог! Я разместил содержание своего комментария ниже.   -  person John Noel    schedule 15.08.2015


Ответы (1)


JMS хранит свой кеш сериализации отдельно от Doctrine, поэтому я бы попытался скопировать ваш кеш (т.е. удалить содержимое каталога кеша, а не просто выполнить команду cache:clear) и повторить попытку. Похоже, сериализатор придерживается старых аннотаций.

person John Noel    schedule 15.08.2015
comment
JFI: папка кеша находится в папке приложения проекта. запустите rm -r cache внутри папки приложения, чтобы очистить папку кеша. - person user3425344; 16.08.2015
comment
Мне также нужно было очистить кеш APCu, перезапустив apache, чтобы очистить это. - person jrjohnson; 17.08.2016