我正在使用
PHP的MVC应用程序,它没有使用任何框架.我使用
RedBean作为我的ORM,它实现了datamapper模式,并且与
doctrine非常相似.
根据这个question,我理解该模型不是ORM对象.在我的项目中,我有以下场景:
>“复杂”模型需要与数据库中的许多表进行通信:
>其中一个模型可能类似于RBAC权限系统.控制器应该能够调用诸如$permission-> isAllowed($controller,$action,$resource)之类的东西来确定是否允许用户执行所请求的操作.此外,他可能会调用$permission-> getPermissions()来获取用户拥有的权限列表.
>“简单”模型,其中模型通常可以由数据库中的1个表表示:
>一个这样的模型将是用户模型.例如$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();
}
}
最后,我先前概述了权限模型.这被认为是MVC背景下的模型吗?此类将在整个应用程序中使用,因为大多数abctions都需要检查访问权限.