Встраивать формы в symfony и сохранять сущности

1

Я пытаюсь внедрить формы в symfony, но я не уверен, что я делаю неправильно. У меня два объекта. Пользователь и цвет

User.php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
/**
 * User
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class User
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\OneToOne(targetEntity="Color", cascade={"persist"})
     */
    protected $color;

    public function getId()
    {
        return $this->id;
    }


    public function getColor()
    {
        return $this->color;
    }

    public function setColor($color)
    {
        $this->color = $color;
    }
}

color.php

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Color
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class Color
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

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


    public function getId()
    {
        return $this->id;
    }


    public function setName($name)
    {
        $this->name = $name;

        return $this;
    }

    public function getName()
    {
        return $this->name;
    }
}

Форма визуализируется отлично, но когда я пытаюсь сохранить объект, я получаю сообщение об ошибке Catchable Fatal Error: Object of class AppBundle\Entity\Color could not be converted to string

Здесь мой контроллер

.......

 $user = new User();

        $form = $this->createForm(new SelectionType(), $user);

        $form->handleRequest($request);

        if($form->isValid()){
            $em = $this->getDoctrine()->getManager();
            $em->persist($user);
            $em->flush();
            return new Response(sprintf('ID %s', $user->getId()));
        }

SelectionType.php

........
 ->add('color', new ColorType())
....

Так что я делаю неправильно?

Теги:
forms
doctrine

1 ответ

1
Лучший ответ

Добавьте __toString() в свой класс Color

// all declaration here
class Color
{
  // all properties here

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

  // all getters and setters here
}

Эта ошибка вызвана тем, что Symfony Form пытается предоставить "представление для GUI" вашего объекта и, если вы не укажете ничего в FormBuilder (или если вы не используете какой-либо DataTransformer), он будет искать строковое представление объекта (который вы можете получить с помощью метода __toString())

  • 0
    Спасибо, это сработало. Я больше не получаю ошибку. Теперь у меня есть другая проблема. Когда я сохраняю сущность пользователя, я получаю дополнительную запись в таблице цветов, поведение которой мне не нужно. Есть идеи как это исправить?
  • 0
    @ Водокан, что ты имеешь в виду под "дополнительной записью"?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню