我正在使用带有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();
在我的控制器中?
答案 0 :(得分:2)
不,我不这么认为,只是你在重型控制器和轻型模型中工作,但这会使你的代码无法重复使用,你将在同一个控制器中多次编写相同的代码
这就是我喜欢重型和光控制器的原因
答案 1 :(得分:0)
您错过了服务层。控制器只是控制运行的对象(模型)和变量的代理。在我看来,模型类只需要自我代表模型,而不是意识到实体管理器。
我认为你需要在两者之间创建一个服务层。保存/修改模型时,控制器会调用服务对象来执行此操作。它只是说“使用数据$ data修改对象$ id”,服务层执行此操作。结果(成功/失败)将传递回控制器以对此结果起作用。