php - Symfony,在哪里将自定义方法放在实体上?

标签 php symfony

我正在学习 Symfony,我正在尝试找出将自定义操作放在实体之上的位置...

例如,如果我有一个实体Order,应该把$order->complete()放在哪里?还是$order->sendToProduction()$order->queueForDelivery()

这些只是示例,我有复杂的实体,我必须对它们执行许多操作。

在 Controller 中?

  • 不,因为可能会从不同的 Controller 调用相同的操作

在实体中?

  • 这在 MVC 模型中是更合适的方法,但在这里我找不到从实体类内部执行自定义 mysql 查询(doctrine/em 不可用)的简单方法,我觉得这很奇怪,因为 db操作应该在实体级别执行,我相信......

在实体 Controller 中?

  • 这似乎不太合适,而且从监听器调用存储库方法并不容易,例如,直接在对象上调用它们...

还有什么?我必须创建服务吗?实用类?

最佳答案

如果工作可以在一个单一的实体(当然是关系)内完成,那么它应该放在那里。我的意思是,如果操作是关于更改实体的内部状态。

否则,如果此作业需要使用应用程序的其他部分(如数据库),或者在多个不相关的实体上执行,那么我建议使用 services .

这就是 where are 的用途。服务基本上是一个可以做任何事情的类。使用服务容器,您可以将任何依赖项传递给它,因此它非常灵活且易于使用。

例如$order->queueForDelivery()。这可能意味着一些不同的事情:

  • 更改内部状态,例如将 status 更改为 queued_for_delivery - 那么它应该在 Order 实体类中
  • $order应该放在其他实体类的Queue中,那么它应该像$一样放在Queue类中队列->addOrder($order)
  • 这个队列是一个外部服务,如 RabbitMQ 或其他任何东西。那么您应该使用服务类。

关于php - Symfony,在哪里将自定义方法放在实体上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37741889/

相关文章:

php - div 中的按钮

symfony - 动态更改 SwiftMailer 中的 smtp 设置

symfony - 无效的PathExpression。预期的StateFieldPathExpression或SingleValuedAssociationField

symfony - 尝试按GeoDistance进行过滤时出现PartialShardFailureException(foselasticaBundle Symfony2)

php - 使用内部 Join 时如何优化 Doctrine 查询的数量?

php - Zend GData 上传文件到指定文件夹

php - 警告 : mysql_fetch_array(): supplied argument is not a valid MySQL result resource

php - 如何根据下拉列表更改操作链接?

php - 如何卸载 Phalcon?

php - 如何在 Symfony2 中禁用一个转换器验证错误 "dynamically"