2013-08-07 6 views
1

Я работаю с symfony2, и у меня есть форма с несколькими полями, одна из которых называется видео. Возможно ли удалить это поле в форме обновления, но не в форме вставки?Удалить поле в форме обновления Entity (Symfony2)

(форма) YoutubepostType.php:

$builder->add('tituloVideo') 
      ->add('descripcionVideo') 
      ->add('tagsVideo') 
      ->add('video', 'file', array('required' => false)); 

Спасибо всем продвинутым.

+1

Самый простой способ - скрыть поле в шаблоне. Если вы действительно хотите это сделать, изучив саму себя, вам нужно добавить слушателя в вашу форму: http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html – Cerad

+0

Хорошо, Cerad, благодарю вас за Ваш ответ. – cmaciasg

+0

По моему опыту, если поле формы не определено в вашем шаблоне, средство визуализации формы просто добавит его по умолчанию в конце формы. Поэтому вы не можете просто «спрятать» его в шаблоне. Cerad знает в миллион раз больше о Symfony, чем я, поэтому я не уверен, что это то, что он предлагает или нет, но я не думаю, что это сработает. –

ответ

0

Если ваш контроллер определяет все поля формы напрямую, вы можете просто добавить оператор if после определения основных полей, чтобы проверить, не является ли это обновлением до добавления поля video, например.

$builder->add('tituloVideo') 
    ->add('descripcionVideo') 
    ->add('tagsVideo'); 
if($myMethod != 'update') { 
    $builder->add('video', 'file', array('required' => false)); 
} 

Но если вы уже определили пользовательские form Collection of fields то поле определяется в вашем объекте Form Builder уже и вы только загрузку этой коллекции в контроллере, то в таком случае вы бы просто удалить его:

$form = $this->createForm(new MyCollectionType(), $entity); 
if($myMethod == 'update') { 
    $form->remove('video'); 
} 

Если это поле из соответствующего объекта, вы получаете объект первой и удалить его оттуда:

$form->get('myEntityName')->remove('myFieldName') 

Примечание: Если вы человек вручную создавая шаблон формы, и вы просто пытаетесь скрыть его в своем шаблоне (например, установить внутри, если заявление), он не будет работать:

{% if $myMethod == 'update' %} 
    {{ form_row(form.video) }} 
{% endif %} 

Форма рендер будет просто добавить его в конце формы в любом случае (в моем опыте), так что не будет работать.

Смежные вопросы