区分为相同的URL /路由请求HTML部分和完整布局

时间:2011-01-27 10:13:02

标签: ajax model-view-controller rest mootools partial-views

目前我正在为我的MVC框架编写路由代码,该代码能够呈现HTML部分(视图)。这些部分可以在服务器端或客户端加载(使用Mootools HTML请求)。然后,从多个部分构建每个页面的布局。因为我希望它符合ReST,每个HTML部分(视图)映射到定义的URL空间中的URL,如下所示(缩进显示预期的文档结构):

...
/      
  /navigation
  /content
    /profile
      /profile/1
        /profile/1/message/
          /profile/1/message/1
          /profile/1/message/2
...

现在的问题是,我希望人们能够访问“/ profile”,然后不显示HTML部分,而是完整的布局。我正在考虑以下事项:

1)在部分URL中创建单独的名称空间/前缀,例如:

  • / profile for full layout
  • / partial / profile for partial

2)发送自定义HTTP标头以请求部分或无自定义HTTP标头请求完整布局。

第一个选项是更符合ReST(缓存友好),但我仍然不确定(这是真正的问题)关于我可能仍然不知道的其他选项。

在开始实施上述解决方案之一之前,我有以下问题:

  1. 我有什么选择来区分请求部分和完整布局?
  2. 保持每个部分的客户端状态/上下文的最佳做法是什么?

2 个答案:

答案 0 :(得分:1)

当您请求客户端时,服务器将接收带有值xmlhttprequest的额外标头HTTP_X_REQUESTED_WITH。

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && 
   strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
   ....
}

这是一个可靠的标题来测试,而不是添加自定义类型。

答案 1 :(得分:1)

选项1绝对是选项2的更好解决方案。在RESTful系统中,我们始终创建新资源以弥补方法的不足。

创建自定义标题是一个非常糟糕的主意。