我阅读了有关将存储库注入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
我遵循了很多例子但没有成功。我不知道我对该服务做了什么,以及我必须在课堂上声明使用我的查询。
请尽力帮助我。
答案 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));
再见