makinacorpus/autocomplete-bundle

Symfony的自动完成上传小部件和表单类型

2.0.0-alpha4 2021-09-22 16:10 UTC

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.twigfields-autocompleter.html.twig之一。

  • 基于模板引擎的渲染已被删除,您需要在自己的源中正确实现。

安装

composer require makinacorpus/autocomplete-bundle

编写JavaScript代码

您必须自己实现JavaScript部分,您需要知道的是您有两个不同的输入

  • 一个具有.tac-container CSS类的容器,以便更精确地选择组件,
  • 一个文本类型输入,
  • 一个隐藏类型输入。
  • 两者都将具有data-tac-id属性(两者产生相同的值)和data-tac-role属性,分别产生labelid值。

文本输入还产生data-autocomplete-uri,其中包含用于查询数据的生成URL(请注意,出于安全或去重的原因,URL可能会随时间变化)。为了查询此URL,您可以使用以下查询参数

  • query包含用户输入,
  • limit包含要获取的项目数量,
  • page页面编号(从1开始)。

一旦您得到结果,并且用户选择了一个值,您必须将返回对象的id属性设置为[data-tac-role="id"]元素,并将对象的label属性设置为[data-tac-role="label"]元素。

如果您在用户手动编辑文本值时清空隐藏值,则获得加分。

使用支持的JavaScript库

此自动完成小部件需要一个第三方库在您的JavaScript代码中全局注册

如果您使用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参数即可。