解決
最後の行を置き換えて、次のことができますreturn $this->render($tmpl);
。
$response = new Response();
$response->setContent($tmpl);
return $response;
use Symfony\Component\HttpFoundation\Response;
ただし、コントローラーの上部にa を配置することを忘れないでください!
仮説
よし、今いるところから始めよう。あなたはコントローラーの中にいて、render
メソッドを呼び出しています。このメソッドは次のように定義されています。
/**
* Renders a view.
*
* @param string $view The view name
* @param array $parameters An array of parameters to pass to the view
* @param Response $response A response instance
*
* @return Response A Response instance
*/
public function render($view, array $parameters = array(), Response $response = null)
{
return $this->container->get('templating')->renderResponse($view, $parameters, $response);
}
docblock は、実際のテンプレートではなく、ビュー名である文字列が必要であることを示しています。ご覧のとおり、templating
サービスを使用して、パラメーターと戻り値をやり取りするだけです。
実行php app/console container:debug
すると、登録されているすべてのサービスのリストが表示されます。templating
の実際のインスタンスであることがわかりますSymfony\Bundle\TwigBundle\TwigEngine
。メソッドrenderResponse
には次の実装があります。
/**
* Renders a view and returns a Response.
*
* @param string $view The view name
* @param array $parameters An array of parameters to pass to the view
* @param Response $response A Response instance
*
* @return Response A Response instance
*/
public function renderResponse($view, array $parameters = array(), Response $response = null)
{
if (null === $response) {
$response = new Response();
}
$response->setContent($this->render($view, $parameters));
return $response;
}
メソッドを呼び出すと、テンプレートを表す文字列を使用して setContent が実行されrender
たプレーン オブジェクトである Response オブジェクトが返されることがわかりました。Response
もう少し詳しく説明したので、気にしないでください。このような解決策を自分で見つける方法を示すためにこれを行いました。