__toString() должен возвращать строковое значение при отправке формы

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

До всего этого я использовал форму множественного выбора «многие ко многим», чтобы выбрать все школы, когда-либо сохраненные в базе данных. Теперь я хочу использовать его, чтобы использовать то, что уже работает.

Поскольку он отправляется через рендеринг, а не через форму, мне удалось создать HTML-форму, отобразить ее и увидеть, что было выбрано при отправке формы, однако у меня было несколько проблем:

Прежде всего, он хотел быть экземпляром объекта и иметь возможность сохранять объект вместо массива. Мне удалось это сделать, выполнив следующие действия:

        $object = new Ecole();
        foreach ($ecolesDispo as $key => $value)
        {
            $object->$key = $value;
        }
        $mission->addEcolesDispo($object);

(Ecole для школ)

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

Вот как выглядит заинтересованная часть моей сущности.

/**
 * Constructor
 */
public function __construct()
{
    $this->ecolesDispo = new \Doctrine\Common\Collections\ArrayCollection();
}

/**
 * @return string
 */
public function __toString()
{
    return (string) $this->addEcolesDispo($object);
//Not sure about that part though
}

/**
 * Add ecolesDispo
 *
 * @param \EcoleBundle\Entity\Ecole $ecolesDispo
 *
 * @return Mission
 */
public function addEcolesDispo(\EcoleBundle\Entity\Ecole $ecolesDispo)
{
    $this->ecolesDispo[] = $ecolesDispo;

    return $this;
}

/**
 * Remove ecolesDispo
 *
 * @param \EcoleBundle\Entity\Ecole $ecolesDispo
 */
public function removeEcolesDispo(\EcoleBundle\Entity\Ecole $ecolesDispo)
{
    $this->ecolesDispo->removeElement($ecolesDispo);
}

/**
 * Get ecolesDispo
 *
 * @return \Doctrine\Common\Collections\Collection
 */
public function getEcolesDispo()
{
    return $this->ecolesDispo;
}

Как я могу преобразовать это в строку?

заранее спасибо


person Jaeger    schedule 27.07.2016    source источник
comment
Что это за Сущность, это Миссионерская Сущность? Кроме того, можете ли вы показать код Ecole Entity? Что именно вы хотите показать функцией __toString()?   -  person Alvin Bunk    schedule 27.07.2016


Ответы (2)


Ваша функция __toString должна выглядеть так:

public function __toString()
{
    return $this->id; // Because __toString seems to be called to set your $key variable...
}

-> полагаться на строковое свойство.

В вашей функции __toString() вы используете (string), который будет неявно вызывать ... __toString() для преобразования $this в строку. Это будет циклический вызов.

person Alsatian    schedule 27.07.2016

Попробуйте это, если в объекте, где вы использовали __toString, есть строковая переменная name, или используйте любое свойство строкового типа этого объекта, которое определяет сам объект.

public function __toString()
{
    // Or change the property that you want to show 
    return $this->name; 
}
person Yash Sharma    schedule 09.11.2016