为什么 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()])
现在,它按预期工作了。
我正在尝试从具有许多重复代码的凌乱 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()])
现在,它按预期工作了。