2016-05-07 3 views
0

Я использую symfony 3.0.5. У меня есть форма с полем типа «коллекция». И когда я печатаю форму коллекции, я получаю только ярлык.Symfony 3 merge form - ошибка печати коллекции (только для печати)

enter image description here

Мой код: UserType.php

class UserType extends AbstractType 
{ 
/** 
* @param FormBuilderInterface $builder 
* @param array $options 
*/ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('firstname') 
     ->add('lastname') 
     ->add('username') 
     ->add('password') 
     ->add('address') 
    ; 
} 

/** 
* @param OptionsResolver $resolver 
*/ 
public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'AppBundle\Entity\User' 
    )); 
} 
} 

ClientType.php

class ClientType extends AbstractType 
{ 
/** 
* @param FormBuilderInterface $builder 
* @param array $options 
*/ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('money') 
     ->add('user',CollectionType::class,array(
      'entry_type' => UserType::class 
     )) 
    ; 
} 

/** 
* @param OptionsResolver $resolver 
*/ 
public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'AppBundle\Entity\Client' 
    )); 
} 

Client.php

class Client 
{ 
/** 
* @ORM\ManyToOne(targetEntity="User", inversedBy="client") 
* @ORM\JoinColumn(name="id", referencedColumnName="id", onDelete="CASCADE") 
*/ 
private $user; 
...//set,get:money,id,... 
} 

Пользователь .php

class User 
{ 
/** 
* @ORM\OneToMany(targetEntity="Client", mappedBy="user") 
*/ 
private $client; 

public function __construct() 
{ 
    $this->client = new ArrayCollection(); 
} 
....//set get: name,id,lastname... 
} 

ClientController.php

public function createAction(Request $request) 
{ 
    $client = new Client(); 
    $user = new User(); 

    $form = $this->createForm(ClientType::class,$client) 
      ->add('submit',ButtonType::class); 
.... 
} 

create.html.twig

{% extends 'base.html.twig' %} 

{% block body %} 
    <h2 class="page-header">Client</h2> 
    {{ form_start(form) }} 
    {{ form_widget(form) }} 
    {{ form_end(form) }} 
{% endblock %} 
+0

вы необходимо добавить пользователя к клиенту, чтобы пользовательская коллекция не была пуста. Другим вариантом было бы оставить пустую коллекцию, но добавьте кнопку/форму «добавить пользователя», используя свойство прототипа (http://symfony.com/doc/current/cookbook/form/form_collections.html#allowing-new-tags- с-в-прототипа). – qooplmao

+0

Я просто добавил ClientType :: class в класс UserType ::, и теперь он работает. – user3650029

ответ

0

Вы можете попробовать это:

{{ form_start(form) }} 
{{ form_row(form.money) }} 
{{ form_row(form.user.firstname) }} 
{{ form_row(form.user.lastname) }} 
{{ form_end(form) }} 

[Редактировать]

Как вы используете collectionType (ошибка?), Вам нужно петлю на пользователя, попробуйте:

{{ form_start(form) }} 
{{ form_row(form.money) }} 
{% for user in form.user %} 
    {{ form_row(user.firstname) }} 
    {{ form_row(user.lastname) }} 
{% endfor %} 
{{ form_end(form) }} 

Но я думаю, что ваша организация являются неправильно, возможно, принять смотреть на это:

use Symfony\Bridge\Doctrine\Form\Type\EntityType; 
// ... 

$builder->add('user', EntityType::class, array(
    'class' => 'AppBundle:User', 
)); 
+0

Все еще не работает. Теперь я получаю: метод «lastname» для объекта «Symfony \ Component \ Form \ FormView» не существует в client \ create.html.twig в строке 7 – user3650029

+0

Вы уверены, что вы установили пользователя в объект клиента? –

+0

Также подумайте, сделайте меня озадаченным, зачем держать пользователя в коллекции так, как вы принадлежите к той стороне ассоциации ManyToOne. Использовать 'EntityType :: class' должен делать трюк. –