Symfony 3 Объект класса не может быть преобразован в строку

У меня есть эта форма адреса. Все работает, как и ожидалось, пока я не добавил поле выбора для городов. Я получаю эту ошибку при попытке сохранить форму:

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 ()
должен вернуть строковое значение

1

Решение

Вы должны реализовать __toString() метод для вас

__toString () позволяет классу решать, как он будет реагировать, когда обрабатывается как строка. Например, что echo $ obj; напечатает. Этот метод должен возвращать строку, так как в противном случае выдается фатальная ошибка уровня E_RECOVERABLE_ERROR.

Например, вы можете написать что-то вроде этого, чтобы представить ваш класс в виде строки:

public function __toString() {
return $this->getCities();
}

Подробнее об этом магический метод Вот.

3

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

Эта ошибка означает, что ваш метод toString возвращает что-то отличное от строки (возможно, массив, идущий по имени?). Возможно, вы захотите проверить данные, чтобы определить, какой это тип данных.

Лучше, чем использовать toString, хотя это choice_label option — это сообщает Symfony, какое свойство из сущности должно быть сопоставлено с меткой.

1

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