Symfony3 - 使用MongoDB ORM将存储库注入服务

时间:2016-09-09 13:53:18

标签: mongodb service dependency-injection symfony

我阅读了有关将存储库注入Symfony2 1下的服务的帖子。我正在尝试两天来调整我的代码,然后转过身来。

我需要你的帮助。

那么问题是什么:

我正在修改Symfony3和MongoDB中的“RatingStar”(http://www.tipocode.com/symfony-2/symfony2-star-rating-system/)。

我想使用我的mongodb到位教义(mysql),我迷失了:(

有服务:

0

注意:我尝试用工厂代替“@doctrine”......依此类推,但是我的类在参数列表中有一些错误。

有一个这样的课程:

  starbar.twig_extension: 
    class: PortailBundle\Twig\StarBarExtension
    arguments: [ "@doctrine", "@request_stack" ]
    tags: 
      - 
        name: twig.extension

我遵循了很多例子但没有成功。我不知道我对该服务做了什么,以及我必须在课堂上声明使用我的查询。

请尽力帮助我。

2 个答案:

答案 0 :(得分:0)

您没有$this->get('doctrine_mongodb'),因为您没有注入container。但是你在这行代码中做了什么,你得到了一个名为doctrine_mongodb的服务,这是你需要的服务,所以在services.yml

arguments: [ "@doctrine_mongodb", "@request_stack" ]

并在您的StarBarExtension班级中:

$query = $this->doctrine->getRepository('PortailBundle:Notes')->findOneBy(array('ARTICLE' =>$mediaId));

也从构造函数中删除RegistryInterface

答案 1 :(得分:0)

是的,你是对的。

我像这样更改service.yml:

starbar.twig_extension: 
    class: PortailBundle\Twig\StarBarExtension
    arguments: [ "@doctrine.odm.mongodb.document_manager", "@request_stack" ]
    tags: 
      - 
        name: twig.extension

并且在StarBarExtension类中:

namespace PortailBundle\Twig;
use Symfony\Component\HttpFoundation\RequestStack;
use Doctrine\ODM\MongoDB\DocumentManager;
use Symfony\Component\HttpFoundation\Cookie;

  class StarBarExtension extends \Twig_Extension
    {
      protected $doctrine;
      private $RequestStack;


 public function __construct(DocumentManager $doctrine, RequestStack $RequestStack)
{
    $this->doctrine_mongodb = $doctrine;
    $this->requestStack = $RequestStack;
}

public function getFunctions() {
  return array(
       'starBar' => new \Twig_Function_Method($this, 'myStarBar'),
  );
}

public function myStarBar($numStar, $mediaId, $starWidth) {

$cookies = $this->requestStack->getCurrentRequest()->cookies->get('LilmodLemaedNote'.$mediaId);

$query = $this->get('doctrine_mongodb')->getRepository('PortailBundle:Notes')->findOneBy(array('ARTICLE' =>$mediaId));

结果是:

Attempted to call an undefined method named "get" of class "PortailBundle\Twig\StarBarExtension".
Did you mean to call e.g. "getFilters", "getFunctions", "getGlobals", "getName", "getNodeVisitors", "getOperators", "getTests" or "getTokenParsers"? 

我认为,这是正常的,但如何才能启动请求?

---------- 我找到了解决方案

我不知道这是好方法,但我有这个要求:

只需更改

$query = $this->get('doctrine_mongodb')->getRepository('PortailBundle:Notes')->findOneBy(array('ARTICLE' =>$mediaId));

$query = $this->doctrine_mongodb->getRepository('PortailBundle:Notes')->findOneBy(array('ARTICLE' =>$mediaId));

再见

相关问题