2008-08-29 108 views

回答

7

如果你的目標是讓用戶友好的URL在整個應用程序,用下面的辦法:

1)創建的應用程序的routing.yml文件的模塊/動作的路由規則。下面的例子是顯示在應用程序中最近的問題一個動作一個路由規則,默認爲第1頁(使用尋呼機):

recent_questions: 
    url: questions/recent/:page 
    param: { module: questions, action: recent, page: 1 } 

2)一旦路由規則設置,使用url_for()幫手在您的模板中格式化傳出網址。

<a href="<?php echo url_for('questions/recent?page=1') ?>">Recent Questions</a> 

在這個例子中,下面的URL將構造:http://myapp/questions/recent/1.html

3)傳入URL(請求)將由路由系統進行分析,如果在路由規則配置中發現模式匹配,則指定的通配符(即URL的:/page部分)將成爲請求參數。

您還可以使用link_to()幫助程序輸出URL,而不使用HTML標記<a>

+0

只是一個尼特,但URL不會用.html部分構造,除非應用程序配置爲這樣(默認情況下不是)。 – 2008-10-10 04:50:58

1

此建議適用於symfony 1.0。它可能會適用於更高版本。

在您sfAction類

串genUrl($參數=陣列(),$絕對= FALSE)

如。 ()'yourmodule/youraction?key = value & key2 = value',true);

在模板

,這將產生一個正常的鏈接。

string link_to($ name,$ internal_uri,$ options = array());

例如。 link_to('My link name','yourmodule/youraction?key = value & key2 = value');

0

此外,如果你真的想要一個查詢字符串與URL時,使用此:

link_to('My link name', 'yourmodule/youraction?key=value&key2=value',array('query_string'=>'page=2')); 

否則,它會嘗試路由它作爲URL的一部分,並可能打破你的行動。

0

您可以直接生成URL,而無需先定義規則。

如果你想在動作中生成URL,你可以使用generateUrl()幫手:

$this->generateUrl('default', array('module'=>'[ModuleName]','action'=>'[ActionName]')) 

如果要生成模板中的網址,你可以使用url_for()幫手:

url_for('[ModuleName]/[ActionName]', $absolute) 

將$ absolute設置爲true/false,如果要顯示它,請不要忘記使用echo。

但是,如果你想使一個鏈接(類似<a href=""></a>),的link_to()助手就行了。