2016-04-24 3 views
0

Я пытаюсь повторно использовать [@ service_container, @ doctrine.orm.entity_manager] как одну переменную, но, похоже, не может понять ее. Я планирую повторно использовать при добавлении большего количества моделей.Symfony2 yml: Передача одного и того же параметра каждой службе

services: 
    generalfunctions: 
     class: classes\classBundle\Controller\DefaultController 
    functionsClass: 
     class: classes\classBundle\Classes\functionsClass  
     arguments: [@service_container,@doctrine.orm.entity_manager] 
    OtakuClass: 
     class: classes\classBundle\Models\otakusModel 
     arguments: [@service_container,@doctrine.orm.entity_manager]  
+0

Вы можете взглянуть на [авто проводки] (http://symfony.com/blog/new-in-symfony-2-8-service-auto-wiring) функция С.Ю. – Federkun

+0

Родителя услуги также могут быть жизнеспособным подходом: http://symfony.com/doc/current/components/dependency_injection/parentservices.html. Кажется очень странным передавать как контейнер, так и менеджер сущности. – Cerad

ответ

0

Вы можете:

  • не беспокоить
  • прохода только сервис контейнер и получить все услуги от него
  • создать собственный класс, который содержит только повторяющиеся услуги и методы getServiceContainer(), getEntityManager(), и т.д.
  • использование autowire - http://symfony.com/doc/current/components/dependency_injection/autowiring.html
+0

Opps, должен был знать, что я мог бы получить менеджера сущностей из сервисного контейнера –

-1

Спасибо всем, что я создал базовый класс, и все модели расширяют этот единственный базовый класс. Я не знал, что вы можете просто скопировать менеджера объектов из объекта службы.

<?php 
namespace classes\classBundle\Models; 
use Doctrine\ORM\EntityManager; 
use Symfony\Component\DependencyInjection\ContainerInterface; 
class baseModel 
{ 
    protected $container; 
    protected $user; 
    protected $functionsClass; 
    protected $em; 
    protected $connection; 
    public function __construct(ContainerInterface $container) 
    { 
     $this->container = $container; 
     $this->em = $this->container->get("doctrine")->getManager(); 
     $this->connection = $this->container->get('doctrine.dbal.default_connection'); 
     $this->functionsClass = $this->container->get("functionsClass"); 
     $this->user = $this->container->get('security.context')->getToken()->getUser(); 
    } 
} 

<?php 
namespace classes\classBundle\Models; 
use classes\classBundle\Models\baseModel; 
use classes\classBundle\Entity\subscriptions; 
class subscriptionsModel extends baseModel 
{ 
    public function returnSubscription($params) 
    { 
     $repository = $this->em->getRepository('classesclassBundle:subscriptions'); 
     $subscription = $repository->findBy($params); 
     return $subscription; 
    } 
    public function subscribe($params) 
    { 
     $repository = $this->em->getRepository('classesclassBundle:subscriptions'); 
     $params['otakuid'] = $this->container->get("OtakuClass")->getId(); 
     $subscription = $repository->findOneBy($params); 
     if ($subscription == null) 
     { 
      $subscription = new subscriptions(); 
      foreach ($params as $key => $value) 
      $subscription->$key = $value; 
      $this->em->persist($subscription); 
     } 
     else 
     $this->em->remove($subscription); 
     $this->em->flush(); 
    } 
} 

services: 
    generalfunctions: 
    class: classes\classBundle\Controller\DefaultController 
    functionsClass: 
    class: classes\classBundle\Classes\functionsClass  
    arguments: [@service_container] 
    OtakuClass: 
    class: classes\classBundle\Models\otakusModel 
    arguments: [@service_container] 
    privateMessagesModel: 
    class: classes\classBundle\Models\privateMessagesModel 
    arguments: [@service_container] 
    subscriptionsModel: 
    class: classes\classBundle\Models\subscriptionsModel 
    arguments: [@service_container] 
    otakusImagesModel: 
    class: classes\classBundle\Models\otakusImagesModel 
    arguments: [@service_container] 
    categoriesModel: 
    class: classes\classBundle\Models\categoriesModel 
    arguments: [@service_container] 
    forumsModel: 
    class: classes\classBundle\Models\forumsModel 
    arguments: [@service_container] 
Смежные вопросы