【问题标题】:Symfony forward with @TemplateSymfony 使用 @Template 转发
【发布时间】:2014-08-17 18:38:01
【问题描述】:

我有一个入口点控制器 (editAction),它根据路由变量 ({property}) 将显示不同的模板。我正在使用注释“@Template”。

我尝试了很多不同的设置,但都没有奏效。我得到的关闭是以下内容:

错误是“合并过滤器仅适用于数组或哈希”

public function editAction(Request $request, $property, $id)
{
    // controller logic

    $form = $this->createForm('ObjectEdit'.ucfirst($property), $object);

    $form->handleRequest($request);

    if ($form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->persist($product);
        $em->flush();



        return $this->redirect($this->generateUrl('acme-demo-dashboard-show'));
        }

    $response = $this->forward('AcmeDemoBundle:Dashboard:edit'. ucfirst($property),
                                array('form' => $form)
                                );


    return $response;
}

/**
 * Edit Title property for Object
 * @Template
 */
public function editTitleAction($form)
{
    return array('form' => $form->createView());
}

Yaml 路由:

acme-demo-dashboard-edit:
    path:  /dashboard/edit/{property}/{id}
    defaults: { _controller: AcmeDemoBundle:Dashboard:edit }
    requirements:

acme-demo-dashboard-edit-title:
    path:  /dashboard/forward/edit/title/{form}
    defaults: { _controller: AcmeDemoBundle:Dashboard:editTitle }

编辑:有关错误的更多信息:

at twig_array_merge (null, array('_locale' => 'en')) 

Edit2:editTitle 的 Twig 模板

{% extends "AcmeDemoBundle::layout.html.twig" %}
{% trans_default_domain "AcmeDemoBundle" %}

{% block AcmeBundleContent %}
<div class="col-sm-12">

                <div class="alert alert-info">
                                {{ (ycRoute~'.intro') | trans }}
                </div>

                {{ form_start(form, { 'attr': {'class': 'form-horizontal', 'role': 'form'}}) }}

                {% if form_errors(form) %}
                                    <div class="alert alert-danger">
                                                {{ form_errors(form) }}
                                    </div>
                {% endif %}

                <div class="form-group {% if form_errors(form.title) %}has-error{% endif %}">
                                {{ form_label(form.title, '', {'label_attr': {'class': 'col-sm-3 control-label'}}) }}
                                    <div class="col-sm-9">
                                                {{ form_widget(form.title, { 'attr': {'class': 'form-control', 'placeholder': (ycRoute~'.titre') } }) }}
                                                <p class="help-block">{{ form_errors(form.title) }}</p> 
                                </div>
                </div>

            <div class="form-group">
        <div class="col-sm-offset-3 col-sm-9">
            {{ form_widget(form.save, { 'attr': {'class': 'btn btn-primary'} }) }}
        </div>
    </div>

    <div class="row">
        <div class="col-sm-9 col-sm-offset-3">
            (<i class="fa fa-asterisk yc-fa-sm"></i>) {{ (ycRoute~'.champRequis')|trans }}
        </div>
    </div>

                {{ form_end(form)}}

</div>
{% endblock AcmeBundleContent %}

【问题讨论】:

  • 请发布用于编辑操作的树枝模板。
  • 我已经发布了只呈现表单的 Twig 模板 :)
  • 好的,所以我要求模板的原因是因为看起来问题出在您试图将 null 与数组合并的地方,而 twig 不喜欢这样。我没有看到模板中使用了任何合并过滤器,所以它可能在 layout.html.twig 中?
  • 您好,您的评论给我带来了很好的方向:) 这确实是一个合并问题,来自 _route 和 _route_params 在转发时消失。 github.com/symfony/symfony/issues/5804

标签: symfony


【解决方案1】:

你尝试过这样的语法来渲染模板吗?您将需要删除 @Template 注释。

 return $this->render(
            'AcmeDemoBundle:Dashboard:edit'. ucfirst($property),
             array('form' => $form)
        );

“forward”用于将请求转发到另一个控制器。

【讨论】:

  • 感谢您的回复,但是我用这种方法遇到了完全相同的错误。
猜你喜欢
  • 2018-10-17
  • 1970-01-01
  • 1970-01-01
  • 2017-10-11
  • 2017-04-22
  • 1970-01-01
  • 1970-01-01
  • 2010-11-07
  • 2017-08-14
相关资源
最近更新 更多