2017-03-15 63 views
0

所以我有嵌套FileCollectionType實體:Symfony的嫩枝 - 刪除嵌套收集而不顯示形式

public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('file', FileType::class, array('label' => 'File', 'required' => false)); 
    } 

現在如果我顯示嵌套的實體,像這樣:

<h3>Files</h3> 
    <ul style="list-style-type:none;padding-left:0;" class="col-files"> 
     {% for file in form.files %} 
      {{ form_row(file) }} 
     {% endfor %} 
    </ul> 

與原型:

{% block _omics_experiment_files_entry_row %} 
    <li class="panel panel-body panel-default"> 
     {{ form_row(form.file) }} 
    </li> 
{% endblock %} 

它像這樣生成HTML(在JS注入之後):

<li class="panel panel-body panel-default"> 
    <div class="form-group"> 
     <label class="control-label" for="omics_experiment_files_0_file">File</label> 
     <input type="file" id="omics_experiment_files_0_file" name="omics_experiment[files][0][file]"> 
    </div> 
    <br> 
    <button type="button" class="btn btn-danger btn-sm"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> Remove 
    </button> 
    <br> 
</li> 

當刪除按鈕被按下<li>消失,在保存文件時正確地從父實體刪除。

不過,我不希望顯示的形式排,我寧願只顯示文件名:生成HTML像

<h3>Files</h3> 
    <ul style="list-style-type:none;padding-left:0;" class="col-files"> 
     {% for file in form.files %} 
      <li class="panel panel-body panel-default"> 
       <p><a href="{{ asset('uploads/omics_experiments/' ~ file.vars.value.path) }}">{{ file.vars.value.name }}</a></p> 
      </li> 
     {% endfor %} 
    </ul> 

<li class="panel panel-body panel-default"> 
     <p><a href="/uploads/omics_experiments/f504b28f1818493d0cbb712e9b3993b009bef857-001 ÔùÅÔùÅ.lrtemplate">001ÔùÅÔùÅ.lrtemplate</a></p> 
     <br><br> 
     <button type="button" class="btn btn-danger btn-sm"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> Remove </button> 
     <br> 
</li> 

從而消除本身從DOM好,但實際上並沒有刪除實體。

這兩種情況下的button元素只是刪除父代<li>

有誰知道我需要做什麼,我可以有第一個例子的行爲,第二個的用戶界面?

我已經嘗試過包括{{form_row(file)}}hidden/visibility:nonediv,這引起,所以我不認爲作品DOM行爲異常。

編輯:

我也嘗試添加一個input:hidden場具有相同idname作爲表單輸入,這沒有奏效。

回答

0

所以我找到了一個稍微哈克的解決方案,如果任何人有任何清潔我很想知道:

<h3>Files</h3> 
    <ul style="list-style-type:none;padding-left:0;" class="col-files"> 
     {% for file in form.files %} 
     <li class="panel panel-body panel-default"> 
      <p><a href="{{ asset('uploads/omics_experiments/' ~ file.vars.value.path) }}">{{ file.vars.value.name }}</a></p> 
      {{ form_widget(file.file , { 'attr': {'style': 'display: none;'} }) }} 
     </li> 
     {% endfor %} 
    </ul> 

雖然display: none不會對整個form_row工作,它的工作對個人form_widget和這足以讓Symfony刪除該文件。