मैं यहाँ मंच तैयार करने के लिए अपने व्यवसाय के नियमों के कुछ (संस्थाओं बोल्ड कर रहे हैं) कर रहे हैं मेरे आवेदन के में कुछ हद तक एक जटिल मूल्य निर्धारण तंत्र है:सिम्फनी 2/सिद्धांत, मेरे नियंत्रक में व्यावसायिक तर्क डालना है? और डुप्लिकेटिंग नियंत्रक?
- एक उत्पाद के लिए अद्वितीय मूल्य अंक हो सकता है एक दिया गया ग्राहक, वेबसाइट, या ग्राहक समूह।
- एक उत्पाद कभी कभी एक या अधिक अतिरिक्त विकल्प अपने स्वयं के मूल्य अंकयामूल्य नियम हो सकता है हो सकता है।
- ए उत्पाद में उपयोगकर्ता द्वारा चुने गए अद्वितीय जोड़, जो अनिवार्य रूप से एक मूल्य और एक पूर्णांक है।
अभी, मैं मूल्य अंक के लिए एक EntityRepository अनिवार्य रूप से आधार उत्पाद के लिए सही कीमत बिंदु निर्धारित करने के लिए किया है। अद्वितीय जोड़ और विकल्प के लिए भी यही है।
PricePointRepository
public function getThePrice($Product, $qty, $Website, $Customer = null)
{
//all logic to get product price for this given instance goes here. Good.
}
नियंत्रक (सरलीकृत)
public function indexAction()
{
$Product = $em->dostuffwithpostdata;
$qty = POST['qty']; //inb4insecure trolls
$Website = $em->dostuff();
$Customer = (if user is logged in, return their object with $em, otherwise null as it is a guest or public person); // No business logic here, just understanding the request.
$price = $em->getRepository(PricePointRepository)->getThePrice($Product,$qty,Website,$Customer);
$Options[] = $em->dostuffwithPOSTdata;
$optionsPrice = 0;
//Below is some logic directly related to pricing the product.
foreach($Options as $option) {
if($option->hasRule()) {
$optionsPrice += $ruleprice; //after some other stuff of course)
} else {
$optionsPrice += $em->getRepository(OptionPricePoints)->getPrice($option->getID(),$qty);
}
}
$uniqueAdditionPrice = $em->stuff;
$finalprice = $price + $optionsPrice + $uniqueAdditionPrice; //This is logic related to how I price this type of product!
$unitprice = $finalprice/$qty;
//twig stuff to render and show $finalprice, $unitprice, $uniqueAdditionPrice
}
सिर्फ उत्पाद पृष्ठ के लिए है यही कारण है कि। जब मैं कार्ट में जाता हूं, ऑर्डर सहेजता हूं, आदि, तब होता है जब यह तर्क पुन: उपयोग करने की आवश्यकता है। जैसा कि आप देख सकते हैं, मैं भंडार वर्गों में अपने व्यापार तर्क के आधार पर डेटा खींचने के लिए संपूर्ण रूप से सिद्धांत का उपयोग करता हूं।
मैं खुशी से urdoingitwrong उत्तरों का स्वागत करता हूं, क्योंकि मुझे सच में लगता है कि यह गलत है। मैं इसे ठीक करने के बारे में कैसे जा सकता हूं? कुछ सुंदर एक सेवा है जो अनिवार्य रूप से इस प्रकार है होगा:
$pricer = getPricerService->Pricer($Entities,$postdata,$etc);
$unitPrice = $pricer->getUnitPrice();
$totalPrice = $pricer->getTotalPrice();
$optionsPrice = $pricer->getOptionsPrice();
लेकिन मैं पता नहीं विशेष रूप से जिस तरह से सिद्धांत और डेटा संग्रह स्थान नियंत्रकों में पहुंचा जा सकता है Symfony/सिद्धांत का है कि अंदर कर रही है, के बारे में जाने के लिए कैसे कर सकते है।
शानदार - धन्यवाद! आपकी प्रतिक्रिया और क्यूबा के बीच मुझे ऐप के इस हिस्से को पूरा करने का तरीका समझ गया है। – Nick
क्या होगा यदि आप एक ही लेनदेन के तहत दो सेवा कॉल गठबंधन करना चाहते हैं? – GorillaApe