0

我正在使用带有 ORM(Doctrine 2)的 MVC 框架(Zend 框架)。乍一看,答案似乎是模型。但经过一番思考,我想知道它是否应该在控制器中。我指的是像这样的功能

static function addProduct($name, $desc, $quantity, $price) {
    $product = new Product();
    $product->name = $name;
    $product->desc = $desc;
    $product->quantity = $quantity;
    $product->price = $price;
    $em->persist($product);
    $em->flush();
}

这样的功能似乎还可以。但是如果我允许通过 AJAX 进行内联编辑。例如。只需编辑产品名称,我想在我的控制器中,我会使用类似的东西

$product->setName($name);
$em->flush();

但是,既然我的$em控制器中无论如何都需要一个实体管理器,它会像我的控制器中的数据库代码一样吗?这是否意味着我做错了?或者也许我可以做类似的事情

$product = new Product();
$product->setName($name);
$product->setDesc($desc);
$product->setQuantity($quantity);
$product->setPrice($price);
$em->persist($product);
$em->flush();

在我的控制器中?

4

2 回答 2

2

不,我不这么认为,只是您正在使用重型控制器和轻型模型,但这会使您的代码不可重用,并且您将在同一个控制器中多次编写相同的代码

这就是为什么我喜欢重型模型和轻型控制器

于 2010-12-24T12:31:29.733 回答
0

您缺少服务层。控制器只是控制对象(模型)和运行的变量的代理。在我看来,模型类只需要是自我代表的模型,而不是实体管理器。

我认为您需要在两者之间创建一个服务层。保存/修改模型时,控制器调用服务对象来执行此操作。它只是说“使用数据 $data 修改对象 $id”,服务层执行此操作。结果(成功/失败)被传回控制器以对该结果采取行动。

于 2010-12-24T15:01:24.133 回答