Crud Catchable Fatal Error: Объект класса Entity \ MyClass не может быть преобразован в строку Symfony 3

Если вы работаете с автоматическим созданием объектов из существующей базы данных, вы можете создать CRUD автоматически, используя doctrine:generate:crud команда от Symfony.

Symfony и доктрина позволяют вам ускорить время разработки с помощью автоматизированного способа создания маршрутов и форм из предыдущего объекта создания из таблицы базы данных. Эта функция очень полезна, однако она не идеальна и могут быть ошибки при разработке.

Одна из тех известных проблем — Класс не может быть преобразован в строку:

Catchable Fatal Error: Объект класса myBundle \ Entity \ myClass не может быть преобразован в строку

500 Внутренняя ошибка сервера — ContextErrorException

Эта проблема вызвано наверное, как было сказано ранее, если вы используете автоматизацию форм с помощью команды crud, самостоятельно объекты, которые не могут быть преобразованы в строку явно. «Довольно ясно и легко понять», не так ли?

Что это значит и как мне это исправить

Если вы новичок в реализации, вы, вероятно, не будете иметь ни малейшего представления о том, как ее решить, но не волнуйтесь, вы исправите это через пару секунд и поймете, почему это происходит.

Рассмотрим следующий пример и международные отношения:

категорияПодкатегория
Я быЯ бы
названиеназвание
category_id

Регистр подкатегории требует в качестве одного из полей своего поля category_id, который может быть получен только из таблицы категорий, простого отношения внешнего ключа.

Но это не главное, главное то, как автоматический crud будет генерировать форму! Вот когда возникает ошибка. Форма будет создана идеально и теоретически должна выглядеть так:

Однако это не будет работать, потому что элемент select Подкатегория форма не может быть отображена, и она вызовет исключение фатальной ошибки, потому что категория файл сущности не знает, какое поле должно отображаться в select, и не предоставляет ни __toString() Волшебный метод для нацеливания поля вручную.

Поэтому, если мы пойдем к категория (или класс с проблемой в вашем проекте) файл сущности в комплекте, класс должен выглядеть так:

id;
}
/**
* Set name
*
* @param string $name
*
* @return Category
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set description
*
* @param string $description
*
* @return Category
*/
public function setDescription($description)
{
$this->description = $description;
return $this;
}
/**
* Get description
*
* @return string
*/
public function getDescription()
{
return $this->description;
}
/**
* Generates the magic method
*
*/
public function __toString(){
// to show the name of the Category in the select
return $this->name;
// to show the id of the Category in the select
// return $this->id;
}
}

Чтобы решить проблему, добавьте __toString метод к классу, который должен быть показан на входе Select, в этом случае категория сущность, как показано в предыдущем фрагменте.

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

Ссылка на основную публикацию
Adblock
detector