我正在学习 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/