2016-02-28 2 views
0

Я всегда использую доктрину из контроллеров или из классов репозитория объектов, теперь я пытаюсь использовать ее из статического класса, но я не могу найти никакого примера о том, как сделать id. В принципе мне понадобится (я думаю) способ создать диспетчер сущности в статическом методе.Как я могу использовать доктрину из статического метода

благодаря M

+1

Предоставленный ответ неверен, так как нет никакого объяснения о статическом методе. Пожалуйста, не принимайте ответ – Trix

ответ

-2

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

services.yml

services: 
    my_service: 
     class: Acme\AppBundle\Services\MyService 
     arguments: ["@doctrine.orm.entity_manager"] 

Тогда в вашем классе вы будете иметь менеджер сущности доступный, как это:

<?php 

namespace Acme\AppBundle\Services; 

use Doctrine\ORM\EntityManager; 

class MyService 
{ 

    /** 
    * Entity Manager 
    * 
    * @var Doctrine\ORM\EntityManager 
    */ 
    protected $em; 

    public function __construct(EntityManager $em) 
    { 
     $this->em = $em; 
    } 

    ... 
} 

И тогда вы можете использовать эту услугу в контроллерах так:

$this->get('my_service')->doSomething(); 
+0

Я знаю этот способ сделать это, но мне нужно сделать запрос из статического метода, потому что мне нужно получить результат с помощью вызова, например $ myResult = MyStaticClass :: getMyValue ($ params) , Поэтому мне нужно использовать dotrine из чего-то вроде public static function getMyValue ($ params) {}. Я бы предпочел не принуждать вас к вызову конструктора. Благодарю. – user3174311

+0

На самом деле тогда с помощью сервиса выше вы просто добавили бы метод к нему, называемый getMyValue ($ params), и назовите его как '' '' $ myResult = this-> get ('my_service') -> getMyValue ($ params) ' '' ''. Нет необходимости ссылаться на конструктор, потому что служба будет создана и администратор сущности автоматически добавлен в эту точку. Если ваша причина для использования этого статического метода - это «возможность называть его удобным из любого места», то, по-моему, услуги в значительной степени подходят Symfony. – sekl

+0

спасибо, я попробую! Как я могу вызвать службу из класса, который расширяет PHPUnit_Framework_TestCase? – user3174311

2

Вы можете вызвать функцию setter, управляющий указателем сущности, где вы вызываете stati с методом:

MyController

Class MyController extends Controller 
{ 
    public function newAction() 
    { 
     $entityManager = $this->getDoctrine()->getManager(); 
     SomeClass::setEntityManager($entityManager); 
     $result = SomeClass::myStaticMethod(); 
    } 
} 

SomeClass

Class SomeClass 
{ 
    private static $entityManager;   

    public static function setEntityManager($entityManager) 
    { 
     self::$entityManager = $entityManager; 
    } 

    public static function myStaticMethod() 
    { 
     return $entityManager->getRepository(SomeEntity::class)->findAll(); 
    } 
}