例如,您的应用程序正在使用这种方式将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/
是否有任何建议我应该在本节中添加哪些功能?什么是创建这种功能的最佳方式?
谢谢
答案 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 helper,download,重新发明轮子毫无意义。