Backbone.js Pushstate Routing и PHP Framework Router

Я использую Backbone.js вместе с инфраструктурой PHP MVC (Codeigniter, Laravel). Я смущен тем, как URL-адреса будут обрабатываться маршрутизатором PHP и Backbone-маршрутизатором при использовании Pushstates. (Я еще не начал использовать 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 ? Если код HTML будет дублироваться как в представлении PHP (для экземпляра, в котором пользователь вводит URL-адрес напрямую), так и в backbone.js View (для случая, когда пользователь нажимает ссылку из http://domain.com/user/user123 )? Это не похоже на оптимальное решение для меня. Или можно как-то визуализировать представление в обоих случаях с помощью магистрали, чтобы избежать дублирования кода?

Пожалуйста, порекомендуйте 🙂

    Вы столкнулись с одним из наиболее сложных аспектов включения pushState в pushState приложение. В принципе, вам необходимо убедиться, что любой маршрут, на который вы будете ссылаться в своем приложении, также может обрабатываться сервером.

    Самый простой способ решить это, на PHP, – /user/user123 все запросы на действительные URL-адреса ( /user/user123 ) на вашу корневую страницу, а затем позвольте позвоночнику вызвать обработчик, соответствующий фрагменту url. Это требует от вас на стороне сервера действительно знать, какой действительный URL-адрес (т.е. /posts/5 действителен, /posts/abc или /aaa/ is нет и т. Д.), Но в остальном это не огромный объем работы.

    В конечном итоге проблема заключается в том, что вы переключаетесь между протоколом без учета состояния (HTTP) и государственным приложением (backbone.js). Это требует некоторого тщательного планирования.

    Что касается второго вопроса, вам не нужно отображать представление на стороне сервера, просто сделайте все, что вы сделали бы для запроса в корневой домен, а backbone.js вызовет соответствующий обработчик (например, /user/user123 ). Единственный случай, когда вы хотите визуализировать представление на стороне сервера, – это если вы хотите поддерживать пользователей без javascript или сделать свое приложение RESTful, и в этом случае вам придется дублировать код просмотра (нет простого способа обойти это).

    Надеюсь, это имеет смысл.