如果事件发生,我怎样才能在我的模板中嵌入控制器?

时间:2012-10-10 20:30:26

标签: javascript symfony twig

我的模板中有一个按钮,如:

<input type="button" value="Button"
       onclick="callController('someValue')"/>

和之前定义的javascript块:

<script type="text/javascipt">
    function callController(value)
    {
        //Code to call the controller here, passing value
    }
</script>

我尝试用

{% render "Stuff:Stuff:action" with {'value' = value } %}

,但是当我点击按钮时,在进入页面时评估该行,并且它会抱怨未定义值(因为它仅在单击按钮后定义)。 我也试过

window.location.href = "{{ path('routeToPage', {'value' = value}) }}"

但它也在定义变量之前进行了评估,因此我收到错误。

我可以在点击按钮后执行此枝条线,这是我想要的吗?或者我应该采取另一种方法?如何在不使用树枝的情况下执行该操作?

1 个答案:

答案 0 :(得分:0)

假设Stuff:Stuff:action没有@Route注释,您需要在其模板中编写一个包装器操作,以呈现Stuff:Stuff:action。但是,如果来自Stuff控制器 的“操作”有@Route,则更简单。

无论如何,我想到了AJAX:

这里我使用了jQuery,但您可以自由使用您选择的库(或者无论如何):

<input id="controllerLoader" type="button" value="Button" />

$(function(){
    $('#controllerLoader').click(function(e){
        $.ajax({
            url: '{{ path('wrapperRoute')}}', // or direct call if there is a `@Route`
            type: 'post',
            dataType: 'html',
            success: function(responseHtml){
                $('#controller_embed_position').html(responseHtml);
            }
        });
     });
});

仅在@Route中未定义Stuff:Stuff:action注释时才需要其余内容。

你需要一个虚拟控制器动作:

/**
 * @Template("AcmeDemoBundle::dummy.html.twig");
 * @Route("/dummy", name="wrapperRoute");
 */
public function dummyAction(){
    return array();
}

最后,dummy.html.twig:

{% render "Stuff:Stuff:action" with {'value' = value } %}

希望我没有错过任何东西......