2008-08-29 111 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()助手就行了。