prudkovski
@prudkovski

Symfone 2 Form: как редактировать определенную запись коллекции?

Добрый день.

Не могу придумать с какой стороны подобраться к решению задачи.
Суть в чем. Сделал по мануалу symfony.com/doc/current/cookbook/form/form_collect... форму редактирования коллекции, добавляет и удаляет записи коллекции ок. (Есть 2 сущности: User и Telephone, связь OneToMany). Теперь стоит задача сделать форму в которой можно редактировать (и удалить) определенную запись из коллекции. Получается или редактировать всю коллекцию в форме или редактировать определенную запись (если рендерить без коллекции), но тогда удалить не получается, потому что не проходит валидация.

Вот и не могу придумать с какой стороны начать. Подскажите куда копать.

PS. Наверное напишу подробней как делаю и что не получается.

Сейчас в контроллере рендерю форму
$formPhone = $this->container->get('form.factory')->create(new ProfilePhonesFormType(), $user);


ProfilePhonesFormType такой:
public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('telephones', 'collection', array(
            'type'         => new TelephoneFormType(),
            'allow_add'    => true,
            'allow_delete' => true,
            'by_reference' => false,
        ));


в шаблоне вывожу записи коллекции так:
<ul class="telephones" data-prototype="{{ form_widget(formPhones.telephones.vars.prototype)|e }}">
{% for phone in formPhones.telephones %}
<li class="added-telephone">{{ form_row(phone.phone_number) }}</li>
 {% endfor %}
</ul>


В таком случае в форме все записи коллекции (плюс ссылки удалить, добавить из мануала с кукбука). А нужно отрендерить в форме только определенную запись. В контроллер ее id передаю, а что дальше с ним делать ума не приложу. Или в шаблоне нужно как-то скрыть все записи с другим id?
  • Вопрос задан
  • 2236 просмотров
Решения вопроса 1
benbor
@benbor
Помог ответ - не забудь лайкнуть
Судя по всему вы зря воспользовались form_collection Если Вам нужно редактировать по 1 записи - то вам добро пожаловть в обычный CRUD. Тоесть табличка, добавить сущность ( телефон) , удалить, посмотреть, редакитровать. form_collection так специально сделан.
Но, варианты, как всегда, есть. Раз у Вас есть id телефона, то, пожалуйста,
$telephone = $repository->findById($telephoneId);
$telephoneForm = $this->container->get('form.factory')->create(new TelephoneFormType(), $telephone);

и работайте, как душеньке угодно. Но лучше, как писал выше, выкидывыйте коллекцию вообще
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы