Symfony2 / Doctrine, нужно ли поместить бизнес-логику в мой контроллер? А дублирующий контроллер?

У меня есть несколько сложный механизм ценообразования в моем приложении. Вот некоторые из моих бизнес-правил, чтобы подготовить почву (жирный шрифт):

A Продукт может иметь уникальныйЦена очков для данногоПокупатель, Веб-сайт, или жеГруппа клиентов.A Продукт иногда может иметь один или несколько дополнительныхПараметры которые могут иметь свои собственныеЦена очков или же Правила цены.A Продукт имеет одинУникальное дополнение выбирается пользователем, что по сути является цена и целое число.

Прямо сейчас у меня есть 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
}

Это только для страницы продукта. Что происходит, когда я попадаю в корзину, сохраняю заказ и т. Д., Когда этологика нужно использовать повторно. Как видите, я повсюду использую Doctrine для извлечения данных, основанных на моей бизнес-логике в классах репозитория.

Я с радостью приветствую неправильные ответы, потому что я действительно считаю, что это неправильно. Как мне исправить это? Что-то красивое было бы сервисом, который по сути выглядит так:

$pricer = getPricerService->Pricer($Entities,$postdata,$etc);
$unitPrice = $pricer->getUnitPrice();
$totalPrice = $pricer->getTotalPrice();
$optionsPrice = $pricer->getOptionsPrice();

Но я понятия не имею, как это сделать внутри Symfony / Doctrine, особенно в отношении доступа к Doctrine и Repositories в Controllers.

Ответы на вопрос(2)

Ваш ответ на вопрос