Symfony:如何将函数render()从服务传递给控制器

时间:2015-07-03 13:17:42

标签: php symfony

我创建了一个简单的服务如下:

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的新手,我想知道究竟是什么问题。

1 个答案:

答案 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');
    }
}