2016-06-24 1 views
0

В моем проекте symfony я пытаюсь вызвать доктрину из объекта класса, идея состоит в том, чтобы поместить информацию в базу данных из конструктора объекта.База данных Symfony от объекта класса

Прежде всего, я должен проверить, находится ли объект в базе данных, а если нет, я должен создать объект и добавить его в базу данных. Я делаю это из объекта класса, потому что много информации выполняется в одном цикле, и для оптимизации я хотел бы сделать это с объекта.

Мой объект:

/** class object */ 
use MainBundle\Services\UserService; 
use MainBundle\Entity\Item; 
use MainBundle\Entity\User; 
use Doctrine\ORM\Mapping as ORM; 

class MyListObject{ 
    function MyListObject($data,$bddUser=null){ 
     if ($data->getSuccess()){ 
      foreach($data->getIdItem() as $id){ 
       $item = new IntItem($id,$data,$this); 

       //database stuff 
       $repository = $this->get('service.item');//get the table user from the database 
       $existItem = $repository->getItemById($id);//get the item 

       if ($existItem == null){ 
        $itemBdd = new Item(); 
        $itemBdd->setIditem($item->getId()); 
        $itemBdd->setIdfull($item->getClassIdFull()); 
        $itemBdd->setName($item->getName()); 


       } 

Моя служба:

services: 
    service.item: 
     class: MainBundle\Services\ItemService 
     arguments: ['@doctrine.orm.default_entity_manager'] 

Мой класс обслуживания:

<? 

class ItemService 
{ 

    private $entityManager; 

    /* 
    * @param EntityManager $entityManager 
    */ 
    public function __construct(EntityManager $entityManager) 
    { 
     $this->entityManager = $entityManager; 
    } 

    /* 
    * @param integer $blogId 
    * 
    * @return Blog 
    */ 
    public function getItemById($itemId) 

     return $this->entityManager 
        ->getRepository('MainBundle:Item') 
        ->find($itemId); 
    } 
} 

Тогда я получил эту ошибку:

Attempted to call an undefined method named "get" of class "MainBundle\Object\MyListObject". 

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

Спасибо. быть хорошим с моим английским, пожалуйста, я постараюсь изо всех сил!

Я действительно не знаю, куда я иду неправильно

ответ

0

ваш класс должен расширить класс ContainerAware

use \Symfony\Component\DependencyInjection\ContainerAware; 

class MyListObject extends ContainerAware 
{ 
    public function someMethod() 
    { 
     $this->container->get('service.item'); 
     ... 
    } 
} 

как и вы будете иметь доступ к контейнеру и всех его услуг.

+0

на этот раз я получил эту ошибку: 'Ошибка: вызов функции члена ГЭТ() на не-объект' – Chardon

+0

я редактировал свой ответ (просто забыл поставить функцию) –

+0

Я уже помещаю его в функцию. Я использую symfony 3, поэтому ContainerAware больше не доступен. Я использую 'use Symfony \ Component \ DependencyInjection \ ContainerAwareInterface; использовать Symfony \ Component \ DependencyInjection \ ContainerAwareTrait; 'это, а также я реализую' ContainerAwareInterface' и добавляю использование 'use ContainerAwareTrait'' внутри класса – Chardon

0

Whith Symfony 3

use Symfony\Component\DependencyInjection\ContainerInterface 
use Symfony\Component\DependencyInjection\ContainerAwareInterface; 

class ItemService implements ContainerAwareInterface 
    { 
     private $container; 

     public function setcontainer(containerinterface $container = null) 
     { 
      $this->container = $container; 
     } 
    } 
Смежные вопросы