您使用什么功能来构建URL?

时间:2010-03-07 18:48:40

标签: php url

例如,您的应用程序正在使用这种方式将vars传递到您的应用程序中 example.com/controller/method/var_1/var_1_value.var_2/var_2_value/等 我认为创建从数组创建此类URL的函数非常有用

输入

array(
 'controller' => 'controller'
 'method' => 'controller_method',
 'var_1' => 'var_1_value',
)

输出

example.com/controller/method/var_1/var_1_value.var_2/var_2_value/

是否有任何建议我应该在本节中添加哪些功能?什么是创建这种功能的最佳方式?

谢谢

2 个答案:

答案 0 :(得分:2)

通常,您不应向用户公开太多内容。目录结构对某些事情有意义,但不适用于所有事情。典型的var1-name/var1-value/var2-name/var2-value/格式是公开变量名称,并且可以在大多数情况下轻松避免。

假设您有一个网站,该网站的论坛中包含分页的主题。您可以使用以下网址:forum/<forum-id>/<thread-id>/<page-num>#post-<post-id>。这种方法的唯一问题是目录可能不明确(例如,如果论坛也是分页的,你如何表示上述内容?)。

StackOverflow遵循“假的人类可读”方法,为您提供questions/<question-id>/<pseudo-slug>之类的网址,其中pseudo-slug实际上不是唯一标识符,但可以是您想要的任何随机字符串。

您通常可以为某些参数提供合理的默认值,以使生成的URL更短(从而更容易记住)。如果您已经这样做了,您应该考虑将参数放在目录结构中是否真的有意义,即它是否实际影响显示的而不仅仅是如何向用户显示?如果它是具有不同表示的相同内容,则在语义层面上更有意义的是将参数放在良好的旧CGI变量中并避免具有基本上重复内容的不同目录结构(SEO指南经常强调您应该避免重复内容 - 例如,谷歌就是这样做的。

至于“根”目录结构:/<controller>/<view>/甚至/<model>/<view>/是某些框架的常见默认值,但它再次暴露了内部结构。 StackOverflow可以使用/questions/show/<question-id>/,但这更加冗长,HTTP方法(show)已经隐含了“动词”(即GET)。我发现像/<collection>/<item-id>/这样的结构不仅更加RESTful,而且更容易记住。

如果您想添加不适合传统CRUD的“方法”(例如,指定要详细显示的项目的“属性”),您可以轻松地将其扩展到/<collection>/<item-id>/<property>/,如果您有数字ID或不介意特殊关键字,您还可以添加/<collection>/<collection-attribute>/之类的例外,其中collection-attribute可以是整个集合的属性或交互方法(我已经看到了RESTful结构的约定,其中通过new的特殊关键字GET是用于创建新项目的表单。

您可以自动执行通过URL公开视图的过程,但是虽然您创建的网址将整洁且一致,但它们不会很容易记忆。亚马逊似乎并不介意,但让URL更易识别并避免“神秘链接”效应仍然是一个好主意。

答案 1 :(得分:1)

如果您使用Zend Framework查看url helperdownload,重新发明轮子毫无意义。