2014-08-27 60 views
0

我使用Symfony表單構建器來過濾我網店中的產品。所以,當表單提交時,我得到這樣的網址:如何使用SEF表單URL並在其中跳出問號?

/category?vendor=apple+htc&price=500-1000 

但我需要使用更多的SEF URL,看起來像:

/category/apple+htc/500-1000 

或性質

/category/173-181-159-160 

或ID也許像哈希:

/category/21232f297a57a5a743894a0e4a801fc3 

有什麼更好的使用,我怎樣才能實現它與Symfony形式?

回答

1

首先,看到更多的代碼(類別Action,formBuilder代碼)會很有幫助。 沒有代碼,我假設你正在發送參數(如蘋果和HTC)和過濾控制器。

如果你想要你的表單URL爲SEF,你必須自己設置表單動作屬性。 Symfony可以幫助您處理後端數據操作,而不是使用前端。您可以使用javascript進行動態action設置。首先,你的onChange附加事件到你的表單元素,併發送更改的值給這個函數:

function changeAction(phoneModel, priceRange){ 
    //some logic to transform values of your form items to SEF url elements 
    document.getElementById('form_id').action = "/category/" + phoneModel + 
    + "/" + priceRange; 
} 

當提交表單時,將所需提交您的形式action指定的URL。

+0

這是很好的解決方案,謝謝! – 2014-09-18 14:17:32

1

symfony路由的問題是什麼?

例子:

category: 
pattern: /category/{vendor}/{price}/{other_params} 
defaults: { _controller: AcmeNameBundle:Category, price: false, other_params: false } 
+0

我需要從發送的表單請求中構建此路由:) – 2014-09-18 14:12:30

+0

我仍然沒有看到任何問題,因爲您知道表單中的所有參數,並且可以將其默認值設置爲false。 您的表單需要對@category路線採取行動,evrithing將正常工作。 無論如何,這是你的選擇。 – Srdjan 2014-09-19 12:00:51

+0

是的,你是對的,但是表單中的動作必須用JS生成,而你在回答中沒有提及它。 – 2014-09-19 15:06:39