【问题标题】:How can I give business logic to a Symfony model class that is related to other entities?如何将业务逻辑赋予与其他实体相关的 Symfony 模型类?
【发布时间】:2015-09-19 00:22:26
【问题描述】:

在 Symfony 2 应用程序中,我需要一个模型类(在数据库中没有持久性),它具有涉及其他实体(具有持久性)的业务逻辑功能。

在我的概念模型中,有“Rooms”、“Connections”和“Algorithms”。房间和连接是基于教义的 Symfony 实体。算法应该是模型类或实体,在数据库中没有持久性。

业务逻辑如下: - 有不同种类的算法 - 一种算法在功能不同的标准中使房间和连接之间的关系。这意味着从数据库中检索房间或连接,应用逻辑,修改或创建新实体到数据库。

我采用的第一种方法是将算法工厂作为Symfony Service 提供一个对象来创建基于类型参数的算法。

控制器调用此服务并调用算法的函数来应用逻辑。

我遇到的概念问题如下:我不知道哪种类型的 Symfony 元素应该是 Algorithm 类。如果它是一个实体,它不能使用 Doctrine Manager 从数据库中获取房间或连接,不是吗?就 Symfony 而言,它应该是控制器即服务吗?

我对如何在 Symfony 架构中表示这一点感到怀疑。

谢谢

【问题讨论】:

标签: symfony model-view-controller doctrine business-logic


【解决方案1】:

它不必是控制器或实体,你可以将它作为一个普通的 PHP 类,并在其他 Symfony 特定的元素中调用它并使用它。

把它放在哪里也是一个偏好问题。

如果您需要访问实体,您可以将这个新类定义为服务,并将其他服务作为参数注入。

示例: 在你的 config.yml

app.algorithms_factory:
    class: AppBundle\Utils\AlgorithmsFactory
    arguments: [@doctrine.orm.entity_manager]

在您的控制器中:

class RoomController extends Controller
{
    public function editRoomAction($roomId, Request $request = null)
    {
        $algorithmFactory = $this->get('app.algorithms_factory');
        ....
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 2020-06-20
    • 2013-11-29
    • 1970-01-01
    相关资源
    最近更新 更多