如何在Symfony PHP中生成友好的URL?

7

我经常会忘记这些内置的Symfony函数用于创建链接。

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(请求)将被路由系统分析,如果在路由规则配置中找到模式匹配,则命名通配符(即URL的:/page部分)将成为请求参数。
您还可以使用link_to()助手输出URL而不使用HTML <a>标记。

只是一个小细节,但是除非应用程序进行了配置(默认情况下不会这样做),否则URL将不会构建为.html部分。 - Nathan Strong

1

这个建议适用于symfony 1.0,后续版本可能也适用。

在您的sfAction类中

string genUrl($parameters = array(), $absolute = false)

例如:$this->getController()->genUrl('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,可以使用url_for()助手函数:
url_for('[ModuleName]/[ActionName]', $absolute)

将$absolute设为true/false,如果想要显示它,请不要忘记使用echo。

但是如果您想制作一个链接(类似于 <a href=""></a>),则可以使用link_to()辅助函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接