2011-10-12 12 views
6

में डेटाबेस पहुंच के बिना मॉडल मैं वर्तमान में symfony2 ढांचे का उपयोग करने के तरीके सीख रहा हूं।symfony2

cook book के माध्यम से जा रहा है, मुझे यह समझने की शुरुआत हो रही है कि सबकुछ एक साथ कैसे फिट बैठता है।

  • प्रलेखन में, वहाँ ORM के रूप में सिद्धांत का उपयोग कर संस्थाओं के बारे में बात की एक बहुत कुछ हो रहा है:

    हालांकि, मैं संस्थाओं, जो मेरा मानना ​​है कि MVC पैटर्न में मॉडल हैं के बारे में 2 प्रश्न हैं। अगर मेरे पास एक इकाई/मॉडल है जिसे किसी भी ओआरएम की आवश्यकता नहीं है, तो क्या यह अभी भी एक "इकाई" माना जाता है?

  • मैंने देखा है कि अधिकांश ट्यूटोरियल में, इकाइयों को अक्सर एप्लिकेशन बंडल के तहत "इकाइयों" नामक फ़ोल्डर में फेंक दिया जाता है। किसी एप्लिकेशन में कई संस्थाओं के साथ, मुझे लगता है कि यह काफी गन्दा और असंगठित हो सकता है। मैं संस्थाओं को समूहबद्ध और व्यवस्थित कैसे कर सकता हूं?

चीयर्स :)

उत्तर

3

अपने सवाल यह है कि अपने मॉडल कक्षाओं को व्यवस्थित करने के बारे में:

आप उप-फ़ोल्डर जोड़ सकते हैं "एंटिटी" फ़ोल्डर है, तो बस अपने नाम स्थान परिभाषा है कि scructure तरह पालन करने के लिए:

<?php 

namespace Acme\SampleBundle\Entity\Subfolder\EntityClass 

के लिए अपने प्रश्न के बारे में बिना ओआरएम के काम: यह आसान है, बस इसका इस्तेमाल न करें। अपनी कक्षाओं की तरह "सामान्य" कक्षाओं कर व्यवहार करेंगे ..

लेकिन आप इंटरफेस किसी तरह का है कि करने के लिए, EntityManager तरह Doctrine2 में भी आवश्यकता होगी।

मैं हमेशा ओआरएम/ओडीएम का उपयोग पसंद करूंगा ..

ऐसा मैं सिर्फ अपने इकाई वर्ग के लिए एक सरल विधि जोड़ना होगा:

<?php 

public function sendByEmail() { 

// Do stuff 
} 

आप न लागू करने के लिए (DB को बचाने के लिए) बिल्कुल सामान। ध्यान दें कि symfony1.4 में इकाइयों पर save() विधि थी। Symfony2 सामान में एक संबंधपरक डेटाबेस में संग्रहीत मॉडल $entityManager->persist($entity);

+1

ओआरएम का उपयोग न करने का मेरा मतलब यह है कि कुछ संस्थाएं डेटाबेस को स्पर्श नहीं करती हैं, बल्कि वे फ़ाइलों या कुछ अन्य स्टोरेज को पढ़ और लिख सकते हैं। – F21

+0

AFAIK सिद्धांत ओडीएम एक्सएमएल फाइलों को बहुत अच्छी तरह से मैप कर सकता है। शायद आपका उपयोगकेस ... – mblaettermann

+0

धन्यवाद, यह नहीं पता था कि सिद्धांत ऐसा कर सकता है। उन मामलों के बारे में जहां मैं अपनी इकाई को कुछ डेटा संसाधित और मान्य करना चाहता हूं, लेकिन इसे सहेजने के बजाय, इसे ईमेल द्वारा डेटा भेजना चाहिए। इस मामले में मैं अभी भी EntityManager का उपयोग करना चाहिए? – F21

0

जब आप बताओ कि क्या आप एक इकाई/मॉडल है कि किसी भी ORM की आवश्यकता नहीं है कि, तुम क्या मतलब है:

  • मॉडल बहुत सरल है ताकि आप का निर्माण कर सकते अपने डेटाबेस प्रश्नों, या:
  • डेटा नियमित फ़ाइलों

में संग्रहित किया जा सकता?

यदि यह पहला मामला है, तो आप इसे प्रबंधित कर सकते हैं जैसा कि आप चाहते हैं, लेकिन यह एक ओआरएम का उपयोग करने के लिए एक अच्छा अभ्यास है।

यदि यह दूसरा मामला है (जैसा कि मुझे लगता है), तो आप अभी भी संस्था वर्गों को बेहतर बना चुके हैं। बस आप अपने वर्गों के अंदर अलग-अलग डेटा से लिंक करते हैं। डेटाबेस में पूछताछ करने के बजाय आप फ़ाइलों में खोज करते हैं।

ऐसा करके आप सर्वोत्तम प्रथाओं को संरक्षित करते हैं, और यदि कुछ दिन आप डीबी मॉडल पर स्विच करना चाहते हैं तो आपको केवल इन कक्षाओं को बदलना होगा।

अपने दूसरे प्रश्न का उत्तर देने के लिए, मेरे पास 50+ इकाइयां मॉडल हैं, और इससे कोई गड़बड़ नहीं होती है। संस्था वर्गों के अंदर मैं उपयोगकर्ता को बताता हूं कि इकाई-संबंध मॉडल कहां मिलना है, इसलिए यह स्पष्ट है।

क्या इससे आपकी मदद मिलती है?

4

संस्थाओं के माध्यम से सहेजा जाता है कर रहे हैं। दस्तावेज एक दस्तावेज़ डेटाबेस में संग्रहीत मॉडल हैं (उदाहरण के लिए, मोंगोडीबी)।

आप उपयोग कर रहे हैं क्या भंडारण प्रकार के आधार पर एक विशेष नाम स्थान में अपना मॉडल मोड़ नहीं करना चाहते हैं, तो यहाँ मैं क्या सुझाव है कि है। अपने मॉडल वर्गों के लिए Model नामस्थान बनाएं। यदि आप एक रिलेशनल डेटाबेस का उपयोग करना चुनते हैं, तो आप अपनी मॉडल क्लास का विस्तार करते हैं और इसे Entity नेमस्पेस में डालते हैं, जो बाहरी फ़ाइल में मैपिंग जानकारी प्रदान करते हैं। यदि आप बाद में दस्तावेज़ डेटाबेस में जाने का निर्णय लेते हैं, तो आप वही करते हैं, लेकिन Document नामस्थान का उपयोग करें।

इस विचार का एक अच्छा उदाहरण के लिए FOSUserBundle देखते हैं।