过滤器如何将另一个过滤器的结果与逻辑与相结合?

How can a filter combine the result of another filter with Logical AND?

我有 2 个过滤器。一个过滤器获取另一个过滤器的结果:

<example:widget.myfilter objects="{blogs}" as="filteredblogs" property="features.uid">
    <example:widget.anotherfilter objects="{filteredblogs}" as="filteredmoreblogs" property="test.name">

过滤器 1 有一个“喜欢”的查询。 过滤器 2 有一个“在”查询。

过滤器 1 控制器

public function indexAction(string $filterfeatures = ""): void
{
    $feature = $this->featureRepository->getFeatureByName($filterfeatures);
    $query = $this->objects->getQuery();
    if(count($feature) > 0) {
        $query->matching($query->in($this->property, $feature));
    }
    $modifiedObjects = $query->execute();
    
    $this->view->assign('contentArguments', [
        $this->as => $modifiedObjects
    ]);

过滤器 2 控制器:

public function indexAction(string $filtertest = ""): void
    {
        $query = $this->objects->getQuery();
        $query->matching($query->like($this->property, $filtertest));
        $modifiedObjects = $query->execute();
        $this->view->assign('contentArguments', [
            $this->as => $modifiedObjects
        ]);

我的问题是两者都进行了查询,但彼此忽略了。第二个过滤器覆盖第一个过滤器。

这两个过滤器之间需要逻辑与。

有什么想法吗?

尽管这可能不是您想要的答案,但是:不要使用小部件!

在 TYPO3 11 中,所有小部件都已从 TYPO3 中删除,请查看有关此重要更改的文档:https://docs.typo3.org/c/typo3/cms-core/master/en-us/Changelog/master/Breaking-92529-AllFluidWidgetFunctionalityRemoved.html


作为解决方案,我建议您将逻辑移回主控制器并在此处解决。我更喜欢使用简单的 PHP 对象来配置此类过滤器。你可以看看https://github.com/FriendsOfTYPO3/tt_address/blob/master/Classes/Controller/AddressController.php#L67-L78