Symfony,在实体上放置自定义方法?

the*_*uts 5 php symfony

我正在学习Symfony,我正试图弄清楚在实体上放置自定义操作的位置......

例如,如果我有一个实体Order,在哪里放$order->complete()?或者$order->sendToProduction(),$order->queueForDelivery()

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

在控制器?

  • 不,因为可以从不同的控制器调用相同的动作

在实体?

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

在EntityController中?

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

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

Jak*_*zak 7

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

否则,如果这个工作需要使用像数据库这样的应用程序的其他部分,或者是在多个不相关的entite上执行,那么我建议使用服务.

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

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

  • 改变内部状态样变statusqueued_for_delivery-那么它应该在Order实体类
  • $order应该放在Queue那个是其他实体类中,那么它应该在Queue类中$queue->addOrder($order)
  • 这个队列是一个外部服务,如RabbitMQ或其他任何东西.然后你应该使用服务类.