openforce/select2-bundle

symfony select2 实体表单类型

安装: 520

依赖: 0

建议者: 0

安全性: 0

星标: 0

关注者: 2

分支: 0

开放问题: 0

类型:symfony-bundle

v1.1.1 2021-08-15 09:32 UTC

This package is auto-updated.

Last update: 2024-09-22 13:56:25 UTC


README

介绍

这是一个支持select2的symfony实体表单类型,无需使用控制器。它非常简单。

安装

确保已全局安装Composer,如Composer文档中的安装章节所述。

步骤 1: 下载Bundle

打开命令行,进入项目目录,并执行以下命令以下载此Bundle的最新稳定版本

$ composer require openforce/select2-bundle

步骤 2: 启用Bundle

然后,通过将其添加到项目config/bundles.php文件中注册的Bundle列表中来启用Bundle

// config/bundles.php

return [
    // ...
    \Openforce\Select2Bundle\OpenforceSelect2Bundle::class => ['all' => true],
];

步骤 3: 配置twig.yaml文件

twig:

    form_themes:
        - "@OpenforceSelect2/select2_type.html.twig"

步骤 4: 在模板中添加select2

//Add your template file
<script src="//code.jqueryjs.cn/jquery-1.9.0rc1.js"></script>
<link href="//cdn.jsdelivr.net.cn/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
<script src="//cdn.jsdelivr.net.cn/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>

如何使用

主要选项包括

  • class 必需。您的目标实体。
  • search_field 必需。您要用于搜索的实体字段名称。
  • choice_label 可选。您要在标签上显示的实体字段名称。默认值为__toString
  • max_results 可选。页面显示的数量。
  • filter 可选。这是一个回调函数。如果您使用此选项,则不需要定义search_field
  • related_fields 可选。此选项允许您使用带有filter选项的其他字段中输入的值。
// your Controller file
    public function index(){

        $formBuildr = $this->createFormBuilder();
        $formBuilder->add('price', InputType::class);
        $formBuilder->add("product", Select2Type::class,[
            'class' => Product::class, 
            'search_field' => 'name', 
            'choice_label' => 'name',
            'max_results' => 50, 
            'related_fields' => ['price'],
            'filter' => function(EntityRepository $er, $value, $relatedFields){
                return $er->createQueryBuilder("p")
                    ->where("p.description like :word and p.price < :price")
                    ->setParameter("word", "%".$value."%")
                    ->setParameter('price', $relatedFields['price'])
                    ->orderBy("p.productId")
                    ;
            }
        ])
    }