我总是倾向于忘记这些内置的 Symfony 功能来制作链接。
答案 0 :(得分:9)
如果您的目标是在整个应用程序中使用用户友好的URL,请使用以下方法:
1)在应用程序的routing.yml文件中为模块/操作创建路由规则。以下示例是一个操作的路由规则,该操作显示应用程序中的最新问题,默认为第1页(使用寻呼机):
recent_questions:
url: questions/recent/:page
param: { module: questions, action: recent, page: 1 }
2)设置路由规则后,使用模板中的url_for()
帮助程序格式化外发URL。
<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()
帮助程序输出网址,而无需使用HTML <a>
标记。
答案 1 :(得分:1)
此建议适用于symfony 1.0。它可能适用于更高版本。
在您的sfAction课程中:
string genUrl($ parameters = array(),$ absolute = false)
例如。 $ this-&gt; getController() - &gt; genUrl('yourmodule / youraction?key = value&amp; key2 = value',true);
在模板中:
这将生成正常链接。
string link_to($ name,$ internal_uri,$ options = array());
例如。 link_to('我的链接名称','yourmodule / youraction?key = value&amp; key2 = value');
答案 2 :(得分:0)
此外,如果您确实需要具有该URL的查询字符串,请使用:
link_to('My link name', 'yourmodule/youraction?key=value&key2=value',array('query_string'=>'page=2'));
否则,它会尝试将其作为网址的一部分进行路由,并可能会破坏您的操作。
答案 3 :(得分:0)
您可以直接生成网址,而无需先定义规则。
如果您想在动作中生成网址,可以使用 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()帮助就可以了。