Symfony 3 – код контроллера аутсорсинга в сервисный уровень

Я очень новичок в Symfony 3, и я хочу избежать бизнес-логики в своих контроллерах. Что я сделал до сих пор, так это:

<?php namespace RestBundle\Controller; use RestBundle\Entity\Attribute; use RestBundle\Entity\DistributorProduct; use RestBundle\Entity\AttributeValue; use RestBundle\Entity\ProductToImage; use Symfony\Component\HttpFoundation\Request; use RestBundle\Entity\Product; use FOS\RestBundle\Controller\FOSRestController; /** * Product controller. * */ class ProductController extends FOSRestController { /** * Creates a new Product entity. * */ public function createProductAction(Request $request) { // Doctrine Manager $em = $this->getDoctrine()->getManager(); // todo: get the logged in distributor object $distributor = $em->getRepository('RestBundle:Distributor')->find(1); // Main Product $product = new Product(); $product->setEan($request->get('ean')); $product->setAsin($request->get('asin')); $em->persist($product); // New Distributor Product $distributorProduct = new DistributorProduct(); $distributorProduct->setDTitle($request->get('title')); $distributorProduct->setDDescription($request->get('description')); $distributorProduct->setDPrice($request->get('price')); $distributorProduct->setDProductId($request->get('product_id')); $distributorProduct->setDStock($request->get('stock')); // Relate this distributorProduct to the distributor $distributorProduct->setDistributor($distributor); // Relate this distributorProduct to the product $distributorProduct->setProduct($product); $em->persist($distributorProduct); // Save it $em->flush(); $response = $em->getRepository('RestBundle:Product')->find($product->getUuid()); return array('product' => $response); } } } 

Я знаю, что это не хороший код, потому что вся бизнес-логика находится в контроллере.

Но как и где я могу поместить этот код (задавать запросы в модель, сохраняться и сливаться с доктриной и т. Д.) В службу или использовать для этого инъекцию зависимостей? Или услуга для этого не правильная?

Я знаю эту страницу и учебник http://symfony.com/doc/current/best_practices/business-logic.html, но для меня не уточняется, где размещать CRUD-действия. ОДИН сервис для сохранения целого проекта со всеми связанными с ним объектами? И используйте Symfony \ Component \ HttpFoundation \ Request; в службе? Итак, поставьте весь код контроллера, где я получаю запрос и назначаю модели в службу? благодаря