मैं PHP में एक एमवीसी अनुप्रयोग पर काम कर रहा हूं जो किसी भी ढांचे का उपयोग नहीं कर रहा है। मैं अपने ओआरएम के लिए RedBean का उपयोग कर रहा हूं, जो डेटामैपर पैटर्न लागू करता है और doctrine से काफी समान काम करता है।क्या मुझे एमवीसी में मॉडल और ओआरएम को पूरी तरह से अलग करना चाहिए?
इस question के अनुसार, मैं समझता हूं कि मॉडल ओआरएम ऑब्जेक्ट नहीं है।
"जटिल" मॉडल जो डेटाबेस में तालिकाओं का एक बहुत कुछ के साथ बात करने की आवश्यकता:
- इन मॉडलों में से एक RBAC अनुमतियाँ की तरह कुछ हो सकता है अपने प्रोजेक्ट में मैं निम्न परिदृश्यों है प्रणाली। यह निर्धारित करने के लिए कि उपयोगकर्ता को अनुरोधित कार्रवाई करने की अनुमति है या नहीं, एक नियंत्रक
$permission->isAllowed($controller, $action, $resource)
जैसे कुछ कॉल करने में सक्षम होना चाहिए। इसके अलावा, उपयोगकर्ता के पास अनुमतियों की सूची प्राप्त करने के लिए वह$permission->getPermissions()
पर कॉल कर सकता है।
- इन मॉडलों में से एक RBAC अनुमतियाँ की तरह कुछ हो सकता है अपने प्रोजेक्ट में मैं निम्न परिदृश्यों है प्रणाली। यह निर्धारित करने के लिए कि उपयोगकर्ता को अनुरोधित कार्रवाई करने की अनुमति है या नहीं, एक नियंत्रक
"सरल" मॉडल जहां मॉडल आम तौर पर डेटाबेस में 1 टेबल द्वारा दर्शाया जा सकता:
- एक ऐसी मॉडल
User
मॉडल होगा। उदाहरण के लिए$user->changeRank()
,$user->addPoints()
और इसी तरह।
- एक ऐसी मॉडल
समस्या मैं अब का सामना करना पड़ रहा विभिन्न चौखटे के लिए सबसे प्रलेखन को देखते हुए, मुझे लगता है कि देख सकते हैं कि उदाहरण में है, 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());
}
एक ORM नहीं मॉडल, क्यों नियंत्रक इसके साथ सीधे बातचीत करने के लिए अनुमति दी है है, तो: उदाहरण के लिए, यहाँ 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
मॉडल को रेखांकित किया था। क्या यह एमवीसी के संदर्भ में एक मॉडल माना जाता है? इस वर्ग का उपयोग पूरे आवेदन में किया जाएगा, क्योंकि अधिकांश कार्यों को एक्सेस अनुमतियों की जांच करने की आवश्यकता होगी।
शानदार सवाल। –