0

PHP MVC フレームワーク (Codeigniter、Laravel) と共に Backbone.js を使用しています。Pushstates を使用する場合に、PHP ルーターとバックボーン ルーターによって URL がどのように処理されるかについて混乱しています。(私はまだ pushstates の使用を開始しておらず、まだ hashbangs を使用しています#)。私は単一ページ アプリケーションに取り組んでいるわけではありませんが、サイトは単一ページ アプリケーションのように機能する複数のページで構成されています。

問題:ページhttp://domain.com/user/user123があり、リンクをクリックするとhttp://domain.com/user/user123#photosAJAX 経由でいくつかの写真が読み込まれ、そのページを削除したい場合、リンクをクリックした後#に に移動するユーザーがhttp://domain.com/user/user123/photosURL を別のページにコピー アンド ペーストすることを決定する問題を予見します。ブラウザー タブにはエラー 404 ページが表示されます。これは、PHP フレームワーク ルーター(PHP ルーターがバックボーンの前に最初に URL 要求を処理すると正しく仮定した場合)がこの URL の存在を認識しないためです。この問題はどのように解決されるべきですか?

別の問題が発生すると思いますが、ユーザーがhttp://domain.com/user/user123/photos直接アクセスしたときにビューをどのようにレンダリングする必要がありますか? PHP ビュー (ユーザーが URL を直接入力する場合) と backbone.js ビュー (ユーザーが からのリンクをクリックする場合) の両方で HTML コードを複製する必要がありますhttp://domain.com/user/user123か? これは私にとって最適な解決策とは思えません。または、コードの重複を避けるために、ビューをバックボーンによって両方のケースで何らかの方法でレンダリングできますか?

お知らせ下さい :)

4

1 に答える 1

3

あなたはpushState、バックボーン アプリに組み込むことのより困難な側面の 1 つに到達しました。基本的に、アプリ内でリンクするすべてのルートがサーバーでも処理できるようにする必要があります。

PHP でこれを解決する最も簡単な方法は、有効な URL ( ) に対するすべての要求を/user/user123ルート ページにルーティングし、バックボーンが URL フラグメントに対応するハンドラーを呼び出すようにすることです。/posts/5これには、有効な URL が何であるか (つまり、有効/posts/abcかどうかなど)をサーバー側で実際に知る必要がありますが/aaa/、それ以外の場合は、膨大な量の作業ではありません。

最終的に問題となるのは、ステートレス プロトコル (HTTP) とステートフル アプリケーション (backbone.js) を切り替えることです。これには、慎重な計画が必要です。

2 番目の質問については、サーバー側でビューをレンダリングする必要はありません。ルート ドメインへのリクエストに対して行うすべてのことを行うだけで、backbone.js が適切なハンドラー (例: /user/user123) をトリガーします。実際にサーバー側でビューをレンダリングしたい唯一のケースは、JavaScript を使用しないユーザーをサポートする場合、またはアプリを RESTful にする場合です。この場合、ビュー コードを複製する必要があります (簡単な方法はありません)。これ)。

それが理にかなっていることを願っています。

于 2012-07-31T02:35:56.220 に答える