2014-03-01 53 views
0

我使用的是Symfony 2.3.4,當然還有Twig。使用jquery設置樹枝路徑函數以形成動作

現在,我試圖將樹枝的函數路徑()設置爲表單的動作,問題是......以及我不能。

當我運行此:

$('#prof_create').prop('action',"{{ path('profesor_create') }}"); 

什麼我的目標是這樣的結果:

<form id="prof_create" class="form-horizontal sf_admin_form_area" 
action="/SVN/Symfony/web/app_dev.php/admin/profesor/create" method="post" 
{{ form_enctype(form) }}> 

是{{路徑( 'profesor_create')}} - >/SVN/Symfony的/web/app_dev.php/admin/profesor/create

的JavaScript文件顯示沒有錯誤,也沒有警告,但它確實不工作,因爲當我嘗試提交表單: 錯誤

中找不到路線 「POST /管理/ PROFESOR /%7B%7B%20path(%27profesor_create%27)%20%7D%7D」

,這意味着它不 「改造」

{{ path('profesor_create') }} 

/SVN/Symfony/web/app_dev.php/admin/profesor/create 

什麼不是我想要做的就是在JS函數寫了整個地址,有沒有得到這個工作的方式?

謝謝你。

回答

0

在您的瀏覽器中顯示實際HTML輸出之前,將顯示並處理Twig及其變量。因此,在這種情況下,{{path('profesor_create')}}只是另一個字符串,它不是由Twig Engine處理的,因爲它已經運行並生成了輸出。

要麼先呈現您的路線,並將其設置在您需要的位置,或者使用javascript路由束(如https://github.com/FriendsOfSymfony/FOSJsRoutingBundle)在JS中呈現您的路線以使用它。

+0

老實說,我從來沒有聽說過那個包,我會看看它,以防萬一在將來我需要它。關於我的問題,我使用表單提交按鈕的onclick()事件中的ajax請求解決了它。檢查出來,謝謝你,太糟糕了還沒有15代表,否則我會讚揚你。 – jmiguel

+0

對不起,我混淆了兩個問題,它不是與ajax,它是一個簡單的jquery函數,它只需要在html.twig文件中實現而不是在.js中,這樣就可以正確呈現twig變量 – jmiguel

+0

按照我告訴你的內容,你用精確的方式解決了。 您將路線放入樹枝,直接將JavaScript放在那裏,因此您確保路線由樹枝渲染。 – DerStoffel

0
{# ../some.html.twig #} 
<form id="prof_create" class="form-horizontal 
sf_admin_form_area" action="{{ path('profesorext_create') }}" 
     method="post" {{ form_enctype(form) }}> 
     {{ form_widget(form) }} 

    <div class="form-actions"> 
     <button onclick="before_submit_action()" id="submit_prof" class="btn btn-primary"> 
     <i class="icon-ok"></i> {{'Guardar' | trans}}</button> 

     <a class="btn" href="{{ path('profesorext') }}"> 
      <i class="icon-ban-circle"></i> {{'Cancelar' | trans }}</a> 
    </div> 
</form> 

<script type="text/javascript"> 
function before_submit_action() { 
    if(<condition_met>) 
     $('#prof_create').attr('action',{{ path('profesor_create') }}); 
    else 
     $('#prof_create').attr('action',{{ path('profesorext_create') }}); 
} 
</script>