回答
首先,爲該字段添加新的FormType
:.
<?php
// src/Acme/Form/Type/DatalistType
namespace Acme\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormView;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class DatalistType extends AbstractType
{
public function getParent()
{
return 'text';
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setRequired(['choices']);
}
public function buildView(FormView $view, FormInterface $form, array $options)
{
$view->vars['choices'] = $options['choices'];
}
public function getName()
{
return 'datalist';
}
}
在services.yml
:
form.type.datalist_type:
class: Acme\Form\Type\DatalistType
tags:
- { name: form.type, alias: datalist }
你有一種形式的主題?如果是,則跳到下一步,如果沒有,在app/Resources/views/Form/fields.html.twig
創建一個新的和更改默認的樹枝主題是:
# app/config/config.yml
twig:
form_themes:
- ':Form:fields.html.twig'
現在形式的主題定義模板爲您的新領域:
{% block datalist_widget %}
<input list="{{ id }}" {{ block('widget_attributes') }}>
<datalist id="{{ id }}">
{% for choice in choices %}
<option value="{{ choice }}"></option>
{% endfor %}
</datalist>
{% endblock %}
使用你的領域中FormType
:
而不是['a', 'b']
你需要以某種方式從數據庫加載你的選擇,我建議將它們在形式上OPTI作爲最簡單的解決方案。
這個解決方案有問題:options values(entities id's)!=我想在datalist中顯示的文本。 – Yakimun
@Yakimun你將想要展示的任何文本傳遞給'choices'選項。 Datalist不允許值與用戶選擇的值不同,它只是爲文本輸入添加自動完成的一種方式。 –
在你formType:
->add('commerciaux', TextType::class,
[
'label' => 'Apporteur d\'affaire*',
'attr' =>
[
'placeholder' => 'Apporteur d\'affaire',
'list' => 'bieres'
]
]
)
在你看來:
{{ form_row(formulaire.commerciaux) }}
<datalist id="bieres">
<option value="Meteor">
<option value="Pils">
<option value="Kronenbourg">
<option value="Grimbergen">
</datalist>
我花了一些時間,試圖解決這個問題,並沒有解決了康斯坦丁的問題與數據庫訪問的一個很簡單的解決方案。它是創建一個具有EntityType的新表單類型,因爲它是父類型。
class DatalistType extends AbstractType
{
public function getParent() {
return EntityType::class;
}
}
然後,您可以創建這個widget一個新的模板:
{# views/form/fields.html.twig #}
{% block datalist_widget %}
<input {{ block('widget_attributes') }} list="{{ form.vars.id }}_list" value="{{ form.vars.value }}" />
<datalist id="{{ form.vars.id }}_list">
{% for choice in choices %}
<option>
{{ choice.label }}
</option>
{% endfor %}
</datalist>
{% endblock %}
最後,你正在構建的形式buildForm功能,您可以添加使用DatalistType,並使用你的表單元素EntityType選項。
$builder->add('fieldName', DatalistType::class ,
array('required' => false,
'label' => 'fieldLabel',
'class' => 'AppBundle\Entity\EntityName',
'choice_label' => 'entityField'))
- 1. 如何在DataList中綁定DataList?
- 2. 我如何使用datalist與datalist?
- 3. 關注datalist
- 4. Datalist中分頁
- 5. gridview內datalist row_data_bound
- 6. Asp.Net在Datalist中
- 7. 樣式HTML5 Datalist
- 8. Datalist itemcommand設計?
- 9. 可選Primefaces DataList
- 10. Dynamic HTML5 Datalist
- 11. Datalist分頁?
- 12. Datalist中的SelectedItem
- 13. 從Datalist到Edit.aspx
- 14. Primefaces datalist + PrettyFaces
- 15. html 5 datalist值
- 16. ASP.NET datalist問題
- 17. datalist問題
- 18. html5 datalist問題
- 19. ASP.Net DataList問題
- 20. asp.net + DataList控件
- 21. 在<datalist>
- 22. List DataSource for DataList
- 23. 嵌套datalist
- 24. DataKeys DataList控件
- 25. DataList問題
- 26. DataList列分佈
- 27. DataList ItemCreated event
- 28. Datalist如表
- 29. xslt中的Datalist
- 30. ASP.NET MVC的Datalist RepeatColumns
應該比較簡單。看到這個鏈接:http://symfony.com/doc/current/cookbook/form/form_customization.html –