Backbone.js Pushstate Routing和PHP Framework的路由器

我正在使用Backbone.js和PHP MVC框架(Codeigniter,Laravel)。 我对使用Pushstates时PHP路由器和Backbone路由器如何处理URL感到困惑。 (我还没有开始使用pushstates,仍然使用hashbangs # )。 我不是在单页应用程序上工作,而是该站点由几个页面组成,这些页面本身就像单页面应用程序。

问题:如果我有一个页面http://domain.com/user/user123 ,并点击链接http://domain.com/user/user123#photos通过AJAX加载一些照片,我想摆脱# ,我预见到用户在点击链接后访问http://domain.com/user/user123/photos决定将URL复制并粘贴到另一个浏览器选项卡中的问题,将会看到错误404页面作为PHP框架路由器(如果我正确地假设PHP路由器在骨干网之前首先处理URL请求)不能识别此URL的存在。 该问题应如何解决?

我认为会出现的另一个问题是当用户直接访问http://domain.com/user/user123/photos时应该如何呈现视图? 是否应在PHP视图(对于用户直接输入URL的实例)和backbone.js视图(对于用户从http://domain.com/user/user123上单击链接的情况)复制HTML代码http://domain.com/user/user123 )? 这对我来说似乎不是最佳解决方案。 或者可以通过骨干在两种情况下以某种方式呈现View以避免重复代码?

请指教 :)

您已经遇到了将pushState合并到骨干应用程序中的一个更具挑战性的方面。 基本上,您需要确保您在应用程序中链接的任何路由也可以由服务器处理。

在PHP中,解决此问题的最简单方法是将所有有效URL请求( /user/user123/user/user123到根页面,然后让骨干调用与url片段对应的处理程序。 这要求您在服务器端实际知道有效的URL是什么(即/posts/5是有效的, /posts/abc/aaa/不是等等),但是否则这不是大量的工作。

最终问题是你在无状态协议(HTTP)和状态应用程序(backbone.js)之间切换。 这需要一些仔细的计划。

关于第二个问题,您不需要在服务器端呈现视图,只需执行您对根域的请求所做的一切,而backbone.js将触发相应的处理程序(例如/user/user123 )。 您想要在服务器端实际呈现视图的唯一情况是,如果您想要支持没有javascript的用户,或者让您的应用程序RESTful,在这种情况下您将不得不复制视图代码(没有简单的方法这个)。

希望有道理。