1

Тема: Как вывести сущность из Доктрины в форму

есть сущность доктрины HOMES

class homes
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/

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

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

private $preview;
 
/**
* @ORM\OneToMany(targetEntity="Properties", mappedBy="homes", cascade={"persist", "remove"})
*/

protected $properties;
.............
}

в таблице базы содержится

id=1
name=Изба
preview=Повернись к лесу задом


Есть еще одна сущность тоже Доктрины

/**
class properties
{
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/

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

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

private $value;
 
/**
* @ORM\ManyToOne(targetEntity="Homes", inversedBy="properties")
* @ORM\JoinColumn(name="homes_id", referencedColumnName="id")
*/

protected $homes;
...........................
}

в таблице базы она содержит

id=1
name=кол-во курьих ножек
value=2
homes=1

В контроллере обявляется форма с сущность Homes

$rep           = $em->getRepository('Top10CabinetBundle:Homes');
 
$home = $rep->find(1);
 
if (!$home)
    $home = new homes();
 
$homeForm = $this->createForm( new homeForm(), $home );
 
$homeForm->bind($request);
...........

И сама форма

class homeForm extends AbstractType
{
 
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add( 'name', 'textarea')
            ->add( 'preview', 'textarea');
    }
...........................................
}

Как добавить в форму параметр properties так чтобы форма выглядела вот так?

<label>Имя дома</label><texarea>Изба</texarea>
<label>Описание</label><texarea>Повернись к лесу задом</texarea>
<label>кол-во курьих ножек</label><input type="text" value="2" />

Понятно что вот так $builder->add( 'properties', 'text') не получится

2

Re: Как вывести сущность из Доктрины в форму

Lisjann пишет:

Понятно что вот так $builder->add( 'properties', 'text') не получится

Ну кагбэ, документацию по формам вам в руки, с официального сайта.
http://symfony.com/doc/current/forms.html

И не сильно важно, что там на 2.0/2.2 уже документации нет (странное, на мой взгляд, решение выпилить доки на неподдерживаемые версии), там в контексте вашей задачи не так много изменилось. Открываете для 2.7 и вперед, с песней.

Единственное ощутимое отличие, емнип, это то, что в 2.0/2.2 конфигуратор формы выглядел так:

public function setDefaultOptions(OptionsResolverInterface $resolver)

а в 2.7 (и в мануале соответственно) он выглядит немного по-другому:

public function configureOptions(OptionsResolver $resolver)

Поэтому в 2.2 вариант кода из мануала работать не будет.

Параметр data_class = homes для основной формы (если вдруг не стоит, ибо в приведенном коде метод setDefaultOptions() у формы отсутствует), тип поля properties — CollectionType, тип элемента в коллекции — какой-нибудь PropertiesType, который вам нужно создать. У этого элемента data_class = properties. В общем, все стандартно, по доке.