我总是倾向于忘记这些用于建立链接的内置Symfony函数。
4 回答
如果您的目标是在整个应用程序中使用用户友好的 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(请求)将被路由系统分析,如果在路由规则配置中发现模式匹配,则命名通配符(即:/page
URL的一部分)将成为请求参数。
您还可以使用link_to()
帮助程序来输出 URL,而无需使用 HTML<a>
标记。
这个建议适用于 symfony 1.0。它可能适用于以后的版本。
在您的 sfAction 类中:
字符串 genUrl($parameters = array(), $absolute = false)
例如。$this->getController()->genUrl('yourmodule/youraction?key=value&key2=value', true);
在模板中:
这将生成一个正常的链接。
字符串 link_to($name, $internal_uri, $options = array());
例如。link_to('我的链接名称', 'yourmodule/youraction?key=value&key2=value');
此外,如果你真的想要一个带有该 url 的查询字符串,你可以使用这个:
link_to('My link name', 'yourmodule/youraction?key=value&key2=value',array('query_string'=>'page=2'));
否则,它将尝试将其作为 url 的一部分进行路由,并可能会破坏您的操作。
您可以直接生成 URL 而无需先定义规则。
如果要在操作中生成 URL,可以使用generateUrl()助手:
$this->generateUrl('default', array('module'=>'[ModuleName]','action'=>'[ActionName]'))
如果要在模板中生成 URL,可以使用url_for()助手:
url_for('[ModuleName]/[ActionName]', $absolute)
将 $absolute 设置为 true/false,如果要显示它,不要忘记使用 echo。
但是如果你想建立一个链接(类似<a href=""></a>
),link_to()助手就可以了。