为什么 symfony 3.4 中的 php 模板渲染正在打印 http headers?

Why a php template render in symfony 3.4 is printing http headers?

我正在尝试从具有许多重复代码的凌乱 PHP 模板结构转变为 slots 以帮助我们在扩展中拥有类似的 twig 理念。

我们遇到的问题是某些模板正在呈现 HTTP Headers:

Form/form.html.php 的代码是:

<?php
/**
 * @var \Symfony\Bundle\FrameworkBundle\Templating\TimedPhpEngine    $view
 * @var \Symfony\Bundle\FrameworkBundle\Templating\Helper\FormHelper $formHelper
 * @var \Symfony\Component\Templating\Helper\SlotsHelper             $slotsHelper
 * @var \Symfony\Component\Form\FormView                             $form
 */
$formHelper = $view['form'];
$slotsHelper = $view['slots'];

?>
<div class="form-wrapper">
    <?php $slotsHelper->output('form-start', $formHelper->start($form)) ?>
    <?php $slotsHelper->output('form-widget', $formHelper->widget($form)) ?>
    <?php $slotsHelper->output('form-end', $formHelper->end($form)) ?>
</div>

另一个模板 Form/Order/form.html.php 的代码是

<?php
/**
 * @var \Symfony\Bundle\FrameworkBundle\Templating\TimedPhpEngine    $view
 * @var \Symfony\Bundle\FrameworkBundle\Templating\Helper\FormHelper $formHelper
 * @var \Symfony\Component\Templating\Helper\SlotsHelper             $slotsHelper
 * @var \Symfony\Component\Form\FormView                             $form
 */
$formHelper = $view['form'];
$slotsHelper = $view['slots'];
$view->extend(':Form:form.html.php');

$slotsHelper->start('form-widget');
echo $formHelper->widget($form);
$slotsHelper->stop();

在 Controller 中,我像往常一样渲染表单 我已经渲染了一个表单:

$this->render("Form/Order/form.html.php", ['form' => $orderForm->createView()])

如果我用 "returned string" 改变这句话,Symfony 只打印这个 "returned string",而不是 headers.

表单呈现正确,但出于某种我无法理解的原因,Symfony 正在打印 HTTP Headers。

谢谢!

好吧,在询问之后我仍在研究它,我终于找到了原因并感谢这个article

我已经执行了渲染,但是 render return 渲染模板为 Response,因此 HTTP Headers。 renderView 只是 return 呈现的模板。

所以我不得不更改行:

$this->render("Form/Order/form.html.php", ['form' => $orderForm->createView()])

$this->renderView("Form/Order/form.html.php", ['form' => $orderForm->createView()])

现在,它按预期工作了。