0

我的架构基于 Symfony 4.4 / ApiPLatform / Mercure / Angular 9。我通过在我的 resources.yaml ApiPlatform conf 文件中添加 mercure:true 从 Mercure 进行了简单的推送。现在我需要将更新设为私有。所以使用 ApiPlatform 我必须添加参数 private:true。但 API 响应现在是:

自 Mercure 0.10 以来,目标不再存在。将更新标记为私有,或将 Mercure 组件降级到版本 0.3

这是我的 yaml 配置:

resources:
    App\Entity\Order:
        attributes:
            mercure:
                - private: true
                - topics: ['object.getMercureTopics()']

正确的配置应该是什么?

4

1 回答 1

1

事实上,ExpressionLanguage 并没有像我想的那样在每个选项中进行评估,只有在配置的选项是字符串时才会评估它。因此,如果需要 ExpressionLanguage 的主题(或其他),解决方案如下:

public function getMercureOptions()
{
    $topic = sprintf(
        '%s/%s',
        self::MERCURE_TOPIC_PREFIX,
        $this->getSomethingFromTheObject()
    );

    return [
        "private" => true,
        "topics" => [$topic]
    ];
}

然后,yaml 配置文件应该是:

resources:
    App\Entity\Order:
        attributes:
            mercure: "object.getMercureOptions()"
于 2020-07-04T14:54:40.677 回答