makinacorpus / autocomplete-bundle
Symfony的自动完成上传小部件和表单类型
Requires
- php: >= 7.4
- symfony/http-foundation: >=4.4
Requires (Dev)
- phpunit/phpunit: ^6
- symfony/expression-language: >=4.4
- symfony/form: >=4.4
- symfony/framework-bundle: >=4.4
- symfony/routing: >=4.4
- symfony/templating: >=4.4
- symfony/yaml: >=4.4
This package is auto-updated.
Last update: 2024-09-22 22:19:36 UTC
README
此包提供
-
一个几乎无依赖的自动完成源API,具有通用的控制器,应该适用于大多数框架,
-
一个为将自动完成内容添加到表单提供表单小部件、源注册和关联控制器的Symfony组件。
升级到2.x
您需要做两个修正
-
第一个是
AutocompleteSourceInterface::find()
方法查询参数的类型发生了变化,您必须适配您的源。 -
第二个是我们现在支持比仅
select2
更多的库,因此您不必包含AutocompleteBundle:Form:fields.html.twig
,而是必须选择fields-select2.html.twig
或fields-autocompleter.html.twig
之一。 -
基于模板引擎的渲染已被删除,您需要在自己的源中正确实现。
安装
composer require makinacorpus/autocomplete-bundle
编写JavaScript代码
您必须自己实现JavaScript部分,您需要知道的是您有两个不同的输入
- 一个具有
.tac-container
CSS类的容器,以便更精确地选择组件, - 一个文本类型输入,
- 一个隐藏类型输入。
- 两者都将具有
data-tac-id
属性(两者产生相同的值)和data-tac-role
属性,分别产生label
和id
值。
文本输入还产生data-autocomplete-uri
,其中包含用于查询数据的生成URL(请注意,出于安全或去重的原因,URL可能会随时间变化)。为了查询此URL,您可以使用以下查询参数
query
包含用户输入,limit
包含要获取的项目数量,page
页面编号(从1
开始)。
一旦您得到结果,并且用户选择了一个值,您必须将返回对象的id
属性设置为[data-tac-role="id"]元素,并将对象的label
属性设置为[data-tac-role="label"]元素。
如果您在用户手动编辑文本值时清空隐藏值,则获得加分。
使用支持的JavaScript库
此自动完成小部件需要一个第三方库在您的JavaScript代码中全局注册
- select2库,
- autocompleter库(尚未实现)。
如果您使用select2
,则需要安装jQuery
(任何版本)。
在您的app/routing.yml
文件中注册routing.yml文件
autocomplete: resource: "@AutocompleteBundle/Resources/config/routing.yml" prefix: /
并在您的app/config.yml
文件中注册相关的表单主题
twig: debug: "%kernel.debug%" strict_variables: false form_themes: # For select2 based widget: - "AutocompleteBundle:Form:fields-select2.html.twig"
请注意,此方法不再受支持,它可能工作,也可能不工作。
用法
首先,实现一个MakinaCorpus\AutocompleteBundle\Autocomplete\AutocompleteSourceInterface
类,该类旨在反映要自动完成的业务对象。
然后只需在您的表单构建器中使用MakinaCorpus\AutocompleteBundle\Form\Type\TextAutocompleteType
表单类型,并将源类名称作为表单类型的source
参数即可。