【问题标题】:Symfony - Set Sonata Admin filter operator to "is equal to" as default optionSymfony - 将 Sonata Admin 过滤器运算符设置为“等于”作为默认选项
【发布时间】:2025-12-05 21:40:02
【问题描述】:

在奏鸣曲管理中,我的管理类中有一个工作过滤器:

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
    $datagridMapper
        ->add('client.name');
}

过滤器将默认匹配“包含”(LIKE 运算符),如下所示:

我希望过滤器使用“等于”(= 运算符)作为默认选项,而不是“包含”:

不幸的是,我在 SO、google 中找不到与此相关的问题或答案,并且 Sonata docs 9.4 filters 目前没有记录。

我该怎么做?

【问题讨论】:

  • 找到解决方案了吗?
  • 我也很好奇,因为我真的可以用这个……我试过了,但也没找到方法……
  • 不幸的是我还没有找到如何做到这一点。目前这对我的应用程序并不重要。如果我发现任何东西,我会发布。

标签: php symfony sonata-admin


【解决方案1】:

我是用 JQuery 做的:

//This function is used for setting all the filters
//in the default views
$("select").find("option").each(function() {
    var ArrayClasses = $(this).parent().attr('class').split(' ');
    var IsFilter = false;
    $.each(ArrayClasses, function(i, value){
        if (value === 'sonata-filter-option')
            IsFilter = true;
    });
    if ($(this).val() === '3' && IsFilter) {
        var HtmlStr = "<span class='select2-chosen'>is iqual to</span>" +
                      "<abbr class='select2-search-choice-close'></abbr>" +
                      "<span class='select2-arrow'><b></b></span></a>";
        $(this).attr("selected", "selected");
        var WrapId = $(this).parent().prev().attr('id');
        $("#" + WrapId + " a.select2-choice").html(HtmlStr);
    }
});

【讨论】:

    【解决方案2】:

    您可以通过覆盖变量 $datagridValues 来覆盖默认过滤器选项

    protected $datagridValues = array(
            'email' => array(
                'type' => 3,
                'value' => ''
            )
        );
    

    'type' =&gt; 3 表示其equal to

    【讨论】:

      【解决方案3】:

      过了很久才发。您可以通过覆盖变量$datagridValues来覆盖默认过滤器选项

      protected $datagridValues = array(
              'email' => array(
                  'type' => 3,
                  'value' => ''
              )
          );
      

      'type' =&gt; 3 表示其equal to

      【讨论】: