Symfony3 — вместо целого числа возвращается строка

В моем пользовательском объекте у меня есть это:

/**
* @ORM\Entity
* @ORM\Table(name="users")
*/
class User extends BaseUser
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

/**
* @var \Doctrine\Common\Collections\ArrayCollection
* @ORM\OneToMany(targetEntity="Blog\BlogBundle\Entity  \Entry",mappedBy="author")
*/
protected $entries;

Это моя полная сущность Entry.

<?php

namespace Blog\BlogBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
* Entry
*
* @ORM\Table(name="entry")
* @ORM\Entity(repositoryClass="Blog\BlogBundle\Repository\EntryRepository")
*/
class Entry
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;

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

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

/**
* @var \DateTime
*
* @ORM\Column(name="timestamp", type="datetime")
*/
private $timestamp;

/**
* @var AppBundle\Entity
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\User",inversedBy="entries")
* @ORM\JoinColumn(name="author", referencedColumnName="id")
*/
private $author;

/**
* @var \Doctrine\Common\Collections\ArrayCollection
* @ORM\OneToMany(targetEntity="Blog\BlogBundle\Entity\Reviews",mappedBy="book_id")
*/
protected $reviews;

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

/**
* Set title
*
* @param string $title
*
* @return Entry
*/
public function setTitle($title)
{
$this->title = $title;

return $this;
}

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

/**
* Set book
*
* @param string $book
*
* @return Entry
*/
public function setBook($book)
{
$this->book = $book;

return $this;
}

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

/**
* Set timestamp
*
* @param \DateTime $timestamp
*
* @return Entry
*/
public function setTimestamp($timestamp)
{
$this->timestamp = $timestamp;

return $this;
}

/**
* Get timestamp
*
* @return \DateTime
*/
public function getTimestamp()
{
return $this->timestamp;
}

/**
* Set author
*
* @param \AppBundle\Entity\User $author
*
* @return Entry
*/
public function setAuthor(\AppBundle\Entity\User $author = null)
{
$this->author = $author;

return $this;
}

/**
* Get author
*
* @return \AppBundle\Entity\User
*/
public function getAuthor()
{
return $this->author;
}

/**
* Get author ID
*
* @return \AppBundle\Entity\User
*/
public function getAuthorId()
{
$id = $this->author;

return $this->$id;

}

public function __toString()
{
try {
return (string) $this->id;
} catch (Exception $exception) {
return '';
}
}
}

Из этого фрагмента кода я пытаюсь получить идентификатор автора, но вместо этого возвращается имя автора. Я предполагаю, что это потому, что я конвертирую в строку в конце. Если я удаляю его, я получаю эту ошибку: symfony2 Catchable Fatal Error: объект класса не может быть преобразован в строку

Чтобы получить ссылку, я делаю следующее:

  • Установка пути author с параметром id в routing.yml пакета, который запускает authorAction($id) внутри BookController. Ожидается, что будет передано целое число.
  • authorAction($id) настраивает Doctrine Manager, вызывает getAllBooksByAuthor() функция в хранилище, где соответствующий запрос возвращает все книги автора с id и отображает шаблон веточки.
  • Ссылка генерируется в шаблоне ветки, но вместо передаваемого параметра указывается имя автора — строка, а не целое число.

Как я могу сделать так, чтобы вместо имени автора передавался идентификатор автора?

Я застрял здесь и мне нужно Entry сущность, чтобы иметь возможность обрабатывать как строки, так и целые числа.

1

Решение

В частности, это изменение:

/**
* Get author ID
*
* @return intger
*/
public function getAuthorId()
{
return $this->author->getId();
}

Примечание: документация @return должна быть изменена, чтобы показать, что она возвращает целое число.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector