ApiPlatform & Mercure(私密话题)
ApiPlatform & Mercure (private topics)
我的架构基于 Symfony 4.4 / ApiPLatform / Mercure / Angular 9. 我通过在我的 resources.yaml ApiPlatform conf 中添加 mercure:true 来简单地从 Mercure 推送文件。现在我需要将更新设为私有。因此,对于 ApiPlatform,我必须添加参数 private:true。
但是 API 现在的响应是:
Targets do not exist anymore since Mercure 0.10. Mark the update as private instead or downgrade the Mercure Component to version 0.3
这是我的 yaml 配置:
resources:
App\Entity\Order:
attributes:
mercure:
- private: true
- topics: ['object.getMercureTopics()']
正确的配置应该是什么?
事实上,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()"
我的架构基于 Symfony 4.4 / ApiPLatform / Mercure / Angular 9. 我通过在我的 resources.yaml ApiPlatform conf 中添加 mercure:true 来简单地从 Mercure 推送文件。现在我需要将更新设为私有。因此,对于 ApiPlatform,我必须添加参数 private:true。 但是 API 现在的响应是:
Targets do not exist anymore since Mercure 0.10. Mark the update as private instead or downgrade the Mercure Component to version 0.3
这是我的 yaml 配置:
resources:
App\Entity\Order:
attributes:
mercure:
- private: true
- topics: ['object.getMercureTopics()']
正确的配置应该是什么?
事实上,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()"