添加/编辑模型的代码在哪里?型号或控制器

时间:2010-12-24 12:17:38

标签: ajax model-view-controller zend-framework orm doctrine-orm

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

这样的功能
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();

在我的控制器中?

2 个答案:

答案 0 :(得分:2)

不,我不这么认为,只是你在重型控制器和轻型模型中工作,但这会使你的代码无法重复使用,你将在同一个控制器中多次编写相同的代码

这就是我喜欢重型和光控制器的原因

答案 1 :(得分:0)

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

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