我是 Symfony 的新手。我读到了有关服务装饰的内容,但我仍然不明白。在 Symfony 中装饰服务实际上意味着什么?
IMO,装饰是一个很棒的 POO 模式,它允许你改变(装饰)第三方的行为。在 Symfony 中,这对于改变第三方服务(本质上是捆绑)的行为很有用。
正如 Cerad 在评论中提到的那样,如果您不理解 Symfony 文档,您可能需要从查找装饰模式开始。 Symfony 文档解释了如何使用它,但没有解释概念。
如果您正在寻找一个很好的示例,我推荐您这个 Symfonycast 教程:Ryan 解释了他如何使用装饰模式来更改 Api 平台状态提供程序的行为。在本教程中,Ryan 需要 DTO 资源,但原始项目提供程序返回一个实体。 Ryan 使用装饰模式来改变行为。由于
services.yaml
文件中的声明,Symfony 将调用装饰器服务而不是原来的服务。在他的 provide
方法(装饰原始方法的方法)中,Ryan 调用原始 provide
方法,但他没有返回实体,而是将其映射到 DTO 资源,然后返回此结果。