6

我总是倾向于忘记这些用于建立链接的内置Symfony函数。

4

4 回答 4

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(请求)将被路由系统分析,如果在路由规则配置中发现模式匹配,则命名通配符(即:/pageURL的一部分)将成为请求参数。

您还可以使用link_to()帮助程序来输出 URL,而无需使用 HTML<a>标记。

于 2008-08-30T15:08:25.020 回答
1

这个建议适用于 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');

于 2008-08-29T15:02:37.370 回答
0

此外,如果你真的想要一个带有该 url 的查询字符串,你可以使用这个:

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

否则,它将尝试将其作为 url 的一部分进行路由,并可能会破坏您的操作。

于 2008-12-16T18:26:07.677 回答
0

您可以直接生成 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()助手就可以了。

于 2011-11-08T14:34:46.700 回答