【问题标题】:Variable does not exist twig symfony变量不存在 twig symfony
【发布时间】:2015-10-02 09:41:11
【问题描述】:

我有一个控制器可以做到这一点

  /**
 * @Route("/AjaxAddQuestionForm/{section}")
 * @ParamConverter("section", class="AppBundle:Section")
 */
public function ajaxAddQuestionFormAction(Request $request, $section)
{
    $question = new Question();
    $addQuestionForm = $this->createForm(new AddQuestionType(), $question);

    return $this->render('AppBundle:Form:ajaxAddQuestionForm.html.twig', array(
      'section' => $section,
      'addAjaxQuestionForm' => $addQuestionForm->createView(),
  ));
}

ajaxAddQuestionForm.html.twig 文件如下所示

{% embed 'modal.html.twig' %}
{% block labelledby %}addnewquestion{% endblock %}
{% block modalId %}addnewquestion{% endblock %}

{% block modalHead %}
{{ 'client.modal.head'| trans }}
{% endblock %}
{% block modalBody %}
{{form_start(addAjaxQuestionForm)}}

<div>
  {{form_widget(addAjaxQuestionForm.section, {value: section.id})}}
</div>

<div class="form-group">
  {{form_label(addAjaxQuestionForm.name, null, {'label_attr': {'class': 'form-label'}}) }}
  <span class="help"></span>
  <div class="controls">
    {{form_widget(addAjaxQuestionForm.name, {'attr':{'class':'form-control'}})}}
  </div>
</div>
<div class="form-group">
  {{form_label(addAjaxQuestionForm.category, null, {'label_attr': {'class': 'form-label'}}) }}
  <span class="help"></span>
  <div class="controls">
    {{form_widget(addAjaxQuestionForm.category, {'attr':{'width':'100%'}})}}
  </div>
</div>
{% endblock %}
{% block modalFooter %}
<button class="btn btn-default" data-dismiss="modal" type="button">{{'client.form.cancel'| trans}}</button>
<input class="btn btn-primary create" type="submit" value="{{'client.form.add.client'| trans}}">
{{form_end(addAjaxQuestionForm)}}
{% endblock %}
{% endembed %}

最后我有一个看起来像这样的edit.html.twig

 <div aria-hidden="true" aria-labelledby="{% block labelledby %}{% endblock %}" class="modal fade" id="{% block modalId %}{% endblock %}" role="dialog" tabindex="-1">
<div class="modal-dialog">
  <div class="modal-content">
    <div class="modal-header">

      <button aria-hidden="true" class="close" data-dismiss="modal" type="button">&times;</button>
      <h4 class="modal-title" id="myModalLabel">{% block modalHead %}{% endblock %}</h4>

    </div>
    <div class="modal-body">
      {% block modalBody %}
      {% endblock %}
    </div>
    <div class="modal-footer">
      {% block modalFooter %}
      {% endblock %}
    </div>
  </div>
</div>
</div>

{% include 'AppBundle:Form:ajaxAddQuestionForm.html.twig' %}

现在我收到以下错误:

Variable "addAjaxQuestionForm" does not exist in src/AppBundle/Resources/views/Form/ajaxAddQuestionForm.html.twig at line 9 

知道我的代码有什么问题吗?

【问题讨论】:

    标签: php symfony twig


    【解决方案1】:

    在您的 edit.html.twig 中(假设您的 addAjaxQuestionForm 变量存在于其中),您需要将其传递给包含的树枝。

    {% include 'AppBundle:Form:ajaxAddQuestionForm.html.twig' with {'addAjaxQuestionForm': addAjaxQuestionForm} %}
    

    【讨论】:

    • 当我在一个块中包含另一根树枝时,我不得不这样做
    • 问题是该变量在edit中不存在,因为它返回给ajaxAddQuestionForm.html.twig
    • 似乎还有其他问题,如果我在你那里,我会尝试简化你的模板,取出嵌入和其他块,到你只呈现表单的地方,然后重新开始围绕它构建所有东西,看看在哪里失败了......
    • 似乎是个好建议。我认为有一种比我现在做事的方式更干净的做事方式。我会试试的。
    【解决方案2】:

    尝试使用

    {{ render(controller('AppBundle:Section:ajaxAddQuestionFormAction',{'section':section})) }}
    

    而不是 Include,您必须将“section”参数添加到 ajaxAddQuestionFormAction。

    如果您不向我们发布与您的问题部分相关的所有代码,我们可以为您提供更多帮助。

    希望对你有帮助

    【讨论】:

      【解决方案3】:

      你应该使用渲染控制器方法而不是包含

      {{ render(controller(
              'AppBundle:Form:ajaxAddQuestionForm',
              { 'section': section }
          )) }}
      

      在此处了解更多信息:http://symfony.com/doc/current/book/templating.html#embedding-controllers

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-08
        • 1970-01-01
        • 2017-08-04
        • 1970-01-01
        • 2016-08-24
        相关资源
        最近更新 更多