【发布时间】:2012-01-01 19:24:48
【问题描述】:
我正在开发一个未使用任何框架的 PHP 中的 MVC 应用程序。我将RedBean 用于我的ORM,它实现了datamapper 模式并且工作方式与doctrine 非常相似。
根据question,我知道模型不是 ORM 对象。在我的项目中,我有以下场景:
-
需要与数据库中大量表对话的“复杂”模型:
- 其中一个模型可能类似于 RBAC 权限系统。控制器应该能够调用类似
$permission->isAllowed($controller, $action, $resource)的东西来确定是否允许用户执行请求的操作。此外,他可能会调用$permission->getPermissions()来获取用户拥有的权限列表。
- 其中一个模型可能类似于 RBAC 权限系统。控制器应该能够调用类似
-
“简单”模型,其中模型通常可以由数据库中的 1 个表表示:
-
User就是一个这样的模型。例如$user->changeRank()、$user->addPoints()等。
-
我现在面临的问题是,查看各种框架的大多数文档,我可以看到在示例中,控制器直接与 ORM 对话。例如,这是来自symfony2 的示例控制器:
public function createAction()
{
$product = new Product();
$product->setName('A Foo Bar');
$product->setPrice('19.99');
$product->setDescription('Lorem ipsum dolor');
$em = $this->getDoctrine()->getEntityManager();
$em->persist($product);
$em->flush();
return new Response('Created product id '.$product->getId());
}
如果 ORM 不是模型,为什么允许控制器直接与其交互?它不应该与看起来像这样的模型交互吗?
class ProductModel{
public function newProduct($name, $price, $description){
$product = new Product();
$product->setName('A Foo Bar');
$product->setPrice('19.99');
$product->setDescription('Lorem ipsum dolor');
$em = $this->getDoctrine()->getEntityManager();
$em->persist($product);
$em->flush();
}
}
最后,我在前面概述了permissions 模型。这是否被认为是 MVC 上下文中的模型?此类将在整个应用程序中使用,因为大多数 abction 都需要检查访问权限。
【问题讨论】:
标签: php model-view-controller orm model