У меня есть эта форма адреса. Все работает, как и ожидалось, пока я не добавил поле выбора для городов. Я получаю эту ошибку при попытке сохранить форму:
Catchable Fatal Error: Объект класса AppBundle \ Entity \ Address не может быть преобразован в строку
В документах говорится, что поле EntityType предназначено для загрузки параметров из сущности Doctrine.
Это форма:
$builder
->add('cities', EntityType::class, array(
'class' => \AppBundle\Entity\Cities::class,
'choice_label' => 'cityname',
'choice_value' => 'cityid')
)
И это моя сущность
/**
* @var string
*
* @ORM\Column(name="cities", type="string", length=55, nullable=false)
*/
private $cities;
И сеттеры / геттеры:
/**
* Set cities
*
* @param string $cities
*
* @return Address
*/
public function setCities($cities)
{
$this->cities = $cities;
return $this;
}
/**
* Get cities
*
* @return string
*/
public function getCities()
{
return $this->cities;
}
Я также добавил это:
public function __toString() {
return $this->getCities();
}
И был такой результат:
Исправляемая фатальная ошибка: метод AppBundle \ Entity \ Address :: __ toString ()
должен вернуть строковое значение
Вы должны реализовать __toString()
метод для вас
__toString () позволяет классу решать, как он будет реагировать, когда обрабатывается как строка. Например, что echo $ obj; напечатает. Этот метод должен возвращать строку, так как в противном случае выдается фатальная ошибка уровня E_RECOVERABLE_ERROR.
Например, вы можете написать что-то вроде этого, чтобы представить ваш класс в виде строки:
public function __toString() {
return $this->getCities();
}
Подробнее об этом магический метод Вот.
Эта ошибка означает, что ваш метод toString возвращает что-то отличное от строки (возможно, массив, идущий по имени?). Возможно, вы захотите проверить данные, чтобы определить, какой это тип данных.
Лучше, чем использовать toString, хотя это choice_label option — это сообщает Symfony, какое свойство из сущности должно быть сопоставлено с меткой.