1

複雑なコントロール パネルを構築する必要があります。

ユーザーが構成する必要があり、任意の数の変更を行った後、それらを送信すると、新しく構成されたレポートが表示されます。

多くの可能な構成オプションがあり、JS はコントロール要素を描画/値で初期化できなければならず、PHP はビジネス ロジックを実行する必要があります (すべて指定された構成オブジェクトに基づいてます)。オブジェクトを反対側に渡す前のオプション。

明らかな解決策は、事前定義された構成オブジェクトを両側に持つことです。

PHP:

 class config {
     public $anArray = array();
 }

JS:

 {
     anArray : []
 }

また、両サイドは と を介しjson_encodeて流暢に通信でき$.parseJSONます。

ただし、両方のエンティティの構造が一致する必要があり、それを確認する方法がわかりません。これら 2 つのテクノロジ間で複雑なデータ構造を通信する方法について、何かアイデアはありますか?

編集:明確にするために、構造とは2つのオブジェクトのプロパティを意味します。オブジェクト自体は単純な構成ラッパーであるため、プライベートプロパティやメソッドなどはなく、スカラーまたは単純なインデックス付き配列であるパブリックフィールドのみです。

したがって、DRY 方法で開発するソリューションが必要です。たとえば、「paginationEnabled」というフィールドを追加する場合は、JS と PHP オブジェクトの両方に表示する必要があります。

PHP:

 class config {
     public $anArray = array();
     public $paginationEnabled = true;
 }

JS:

 {
     anArray : [],
     paginationEnabled : true
 }

私はそれらを両側に別々に実装することができましたが、それは DRY ではなく (このシナリオではひどいことです)、そのための解決策がなければならないと感じています。

4

1 に答える 1

3

最も簡単な解決策は、JSON でエンコードされたオブジェクト構造全体を、サーバーへのすべての要求、およびサーバーから返されるすべてのページに含めることです。PHP も JavaScript もページのロード間で保持されないため、とにかくこれが必要になります (AJAX を使用している場合は、JavaScript のみが保持される場合を除きます)。

もちろん、データが既に JSON エンコード可能な形式になっている場合にのみ機能します。(配列と単純なオブジェクトは任意の深さにエンコードできますが、重要なクラス、ファイルハンドル、または関数のオブジェクトはエンコードできません。)そうでない場合は、1 つに変換してから、反対側で元に戻す必要があります。たとえば、オブジェクトのクラスが重要な場合、最初に対応するクラスが反対側に存在することを確認する必要があります。次に、目的のクラス名を{class: $class, value: $value}- で示し、反対側にコードを追加して、その構築と再構築を見つけます。目的のクラスのオブジェクト。関数をコピーする必要がある場合、すべての関数を JavaScript として保存し、PHP に JavaScript インタープリター ライブラリを含めれば、それは管理しやすいかもしれません。ただし、それはおそらく価値があるよりも面倒です。

JSON オブジェクトが大きすぎてすべてのリクエストで送信できない場合は、(データベースに適した形式で) データベースに保存し、JavaScript 側で何かが変更されたときに AJAX を使用してデータベースを更新するか、クライアント コードがまだ持っていないオブジェクトの部分を取得します。

于 2012-06-08T20:07:26.983 に答える