我创建了一个简单的服务如下:
public function showVar($data)
{
switch($data){
case 'test':
return $this->render('test/basic.html.twig', array('var'=>$data));
break;
default:
return $this->render('test/warning.html.twig');
}
}
并将其加载到控制器中
public function indexAction()
{
$var = 'test';
$locationService = $this->container->get('test');
$ownFunction = $locationService->showVar($var);
return $ownFunction;
}
这是我得到的错误
Attempted to call an undefined method named "render" of class
"AppBundle\Service\MyService".
我是Symfony的新手,我想知道究竟是什么问题。
答案 0 :(得分:4)
您的控制器需要返回Response
Symfony对象:
use Symfony\Component\HttpFoundation\Response;
public function indexAction()
{
$var = 'test';
$locationService = $this->container->get('test');
$ownFunction = $locationService->showVar($var);
return new Response($ownFunction);
}
这在Symfony书的Controller chapter中有解释。从Symfony控制器返回的两种最常见的方法是:
new Response($content)
,这种情况非常罕见,但在您手动创建响应内容时需要这样做。$this->render('templateName', $parameters)
,这是返回渲染模板时的常见情况。在您的情况下,服务返回内容,但呈现模板。然后,解决方案是在您的服务中注入@templating
服务,并通过以下方式更改showVar()
方法的代码:
public function showVar($data)
{
switch($data) {
case 'test':
return $this->templating->render('test/basic.html.twig', array('var'=>$data));
break;
default:
return $this->templating->render('test/warning.html.twig');
}
}