Здесь я создал сервис для управления моей звездной нотацией, но когда я хочу протестировать, у меня появляется следующее сообщение об ошибке: Сервис «Doctix.twig_extension» зависит от несуществующего «запроса» службы.Я попробовал несколько предложений, но ошибка все еще сохраняется, и я не могу получить доступ ни к одной из своих страниц.Есть мой сервис:
Сервис
Doctix.twig_extension:
class: Doctix\PatientBundle\Twig\StarRatingExtension
arguments: ["@doctrine", "@requestStack"]
tags:
- { name: twig.extension }
Класс StarRatingExtension
<?php
namespace Doctix\PatientBundle\Twig;
use Symfony\Bridge\Doctrine\RegistryInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Cookie;
class StarRatingExtension extends \Twig_Extension
{
protected $doctrine;
private $request;
public function __construct(RegistryInterface $doctrine, RequestStack $requestStack)
{
$this->doctrine = $doctrine;
$this->requestStack = $requestStack;
}
public function getFunctions() {
return array(
'starBar' => new \Twig_Function_Method($this, 'myStarBar'),
);
}
public function myStarBar($numStar, $medecinId, $starWidth) {
$cookies = $this->requestStack->cookies->get('symfonyRatingSystem'.$medecinId);
$nbrPixelsInDiv = $numStar * $starWidth; // Calcule la hauteur de la div en pixel
$query = $this->doctrine->getRepository('DoctixPatientBundle:Rating')->findOneBy(array('medecin' => $medecinId));
if (isset($query)) {
$average = round($query->getRate()/$query->getNbrrate(), 2);
$nbrRate = $query->getNbrrate();
} else {
$average = 0;
$nbrRate = 0;
}
//nombre de pixel à colorier (in yellow)
$numEnlightedPX = round($nbrPixelsInDiv * $average / $numStar, 0);
$getJSON = array('numStar' => $numStar, 'medecinId' => $medecinId); // Nous créons un JSON avec le nombre d'étoiles et l'id du doc
$getJSON = json_encode($getJSON);
$starBar = '<div id="group'.$medecinId.'">';
$starBar .= '<div class="star_bar" style="width:'.$nbrPixelsInDiv.'px; height:'.$starWidth.'px; background: linear-gradient(to right, #ffc600 0px,#ffc600 '.$numEnlightedPX.'px,#ccc '.$numEnlightedPX.'px,#ccc '.$nbrPixelsInDiv.'px);" rel='.$getJSON.'>';
for ($i=1; $i<=$numStar; $i++) {
$starBar .= '<div title="'.$i.'/'.$numStar.'" id="'.$i.'" class="star"';
if( !$cookies )
$starBar .= ' onmouseover="overStar('.$medecinId.', '.$i.', '.$numStar.');" onmouseout="outStar('.$medecinId.', '.$i.', '.$numStar.');" onclick="rateMedia('.$medecinId.', '.$i.', '.$numStar.', '.$starWidth.');"';
$starBar .= '></div>';
}
$starBar .= '</div>';
$starBar .= '<div class="resultMedia'.$medecinId.'" style="font-size: small; color: grey">'; // Montre le score et le nombre de votes We show the rate score and number of rates
if (!isset($query)) $starBar .= 'Pas encore de vote';
else $starBar .= 'Rating: ' . $average . '/' . $numStar . ' (' . $nbrRate . ' votes)';
$starBar .= '</div>';
$starBar .= '<div class="box'.$medecinId.'"></div>';
$starBar .= '</div>';
return $starBar;
}
public function getName()
{
return 'StarRating_extension';
}
}