drupal 8 error to render template twig with controller
我正在尝试使用我的控制器渲染模板但不起作用
它告诉我这个错误:
LogicException: The controller must return a response (
Hello Bob! given). in Symfony//Component//HttpKernel//HttpKernel->handleRaw() (line 163 of core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpKernel.php).
我的功能:
1
2 3 4 5 |
public function helloAction($name) {
$twigFilePath = drupal_get_path(‘module’, ‘acme’) . ‘/templates/hello.html.twig’; $template = $this->twig->loadTemplate($twigFilePath); return $template->render(array(‘name’ => $name)); } |
在 Drupal 8 中,您可以从控制器返回 Response 对象或渲染数组。所以你有两个选择:
1) 将渲染的模板放入一个 Response 对象中:
1
2 3 4 5 6 |
public function helloAction($name) {
$twigFilePath = drupal_get_path(‘module’, ‘acme’) . ‘/templates/hello.html.twig’; $template = $this->twig->loadTemplate($twigFilePath); $markup = $template->render(array(‘name’ => $name)); return new Response($markup); } |
2) 将渲染后的模板放入渲染数组中:
1
2 3 4 5 6 7 8 |
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
class ClientController extends ControllerBase implements ContainerInjectionInterface ,ContainerAwareInterface {
protected $twig ; public function __construct(//Twig_Environment $twig) public function index() $twigFilePath = drupal_get_path(‘module’, ‘client’) . ‘/templates/index.html.twig’; } // this is called first then call constructor |
这个通过控制器的依赖注入渲染树枝的完整示例
你也可以使用没有自定义模板的第二个选项,这样做:
1
2 3 4 5 6 |
public function helloAction($name) {
$markup ="<p> Without custom Template</p>"; return array( ‘#markup’ => $markup, ); } |
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/268481.html