我的工作是不使用任何框架,PHP的MVC應用程序。我使用RedBean我的ORM,它實現了DataMapper的模式和作品相當類同doctrine。我應該在MVC中將模型和ORM完全分開嗎?
按本question,據我所知,該模型不是ORM對象。在我的項目,我有以下情形:
「複雜」的模型,其需要在數據庫中有很多表的談話:
- 其中一個模型可以是這樣的RBAC權限系統。控制器應該能夠調用諸如
$permission->isAllowed($controller, $action, $resource)
的東西來確定用戶是否被允許執行所請求的動作。另外,他可能會撥打$permission->getPermissions()
以獲取用戶擁有的權限列表。其中模型一般可以用1臺在數據庫中表示
- 其中一個模型可以是這樣的RBAC權限系統。控制器應該能夠調用諸如
「簡單」模式:
- 一個這樣的模式將是
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背景下的模型?這個類將在整個應用程序中使用,因爲大多數檢查都需要檢查訪問權限。
大問題。 –