私は、フレームワークを使用していないPHPのMVCアプリケーションで作業しています。 ORMにRedBeanを使用しています。これは、datamapperパターンを実装しており、doctrineと非常によく似ています。MVCでモデルとORMを完全に分離する必要がありますか?
このquestionによれば、私はモデルがORMオブジェクトではないことを理解しています。データベース内のテーブルの多くの話をする必要がある
「複雑な」モデル:これらのモデルの
- 一つは、RBACの権限のようなものにすることができます私のプロジェクトで、私は次のシナリオを持っていますシステム。コントローラーは、
$permission->isAllowed($controller, $action, $resource)
のようなものを呼び出して、ユーザーが要求されたアクションを実行できるかどうかを判断できるはずです。また、$permission->getPermissions()
に電話して、ユーザーの権限のリストを取得することもできます。
- 一つは、RBACの権限のようなものにすることができます私のプロジェクトで、私は次のシナリオを持っていますシステム。コントローラーは、
モデルは、一般に、データベースに1つのテーブルで表現することができる「単純な」モデル:
- 一つのそのようなモデルは
User
モデルであろう。例えば、$user->changeRank()
,$user->addPoints()
などとなります。
- 一つのそのようなモデルは
私が今直面しています問題は、様々なフレームワークのために、ほとんどのドキュメントを見て、私は直接、例にORMとコントローラの会談をそれを見ることができるということです。 ORMは、モデルは、なぜコントローラはそれと直接対話することが許可されていない場合は
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());
}
:たとえば、ここにsymfony2からコントローラ例ですか?このようなモデルと対話してはいけませんか?
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の文脈でモデルとみなされますか?このクラスはアプリケーション全体で使用されます。ほとんどのツールではアクセス許可をチェックする必要があります。
大きな質問です。 –