Ajaxアプリケーションからのリクエストに応答するサーバー側スクリプトを設計するのは難しいです。Ajaxリクエストに応答するPHPサービスを構成する方法
現在、アプリは個別のページ(注文、アイテム、財務など)に分割されています。これらのページを切り替えると、実際のWebページがリロードされます。各ページにはそれ自身の「演算子」があります。この演算子は、すべてのAjax要求を対象とするルートoperator.php
に必要です。各オペレータに含ま
このパターンである:
foreach ($actions as $action) {
switch ($action) {
case 'get-items':
[...]
break;
case 'get-item':
[...]
break;
case 'update-item':
[...]
break;
[...]
}
}
は、例えば、リクエストによって供給されoperator.php?page=items&action=get-item&id=123
。
アプリケーションが複雑になるにつれて、アクションが要求されたコンテキストから各アクションのロジックを分離するのに役立ちました。
私はPHPの内部アクションのロジックを使用したいとき、私は頻繁にこのパターンを使用した:
$items = json_decode(file_get_contents('http://[...]/operator.php?action=get-items'));
(言うまでもなく、この設計は、余分なオーバーヘッドの多くを作成します。)
代わりに、私は今、各ページによって拡張されるOperator
クラスを持っています。私は、例えば、ItemsOperatorを作成し、直接私が望むアクションを呼び出し、任意のエンコードまたはデコードや余計なHTTPリクエストのないことができます。
$items = $itemsOperator->getItems();
私は演算子クラスを使用するAjaxリクエストに対応するスクリプトを変更し、そのよう:
foreach ($actions as $action) {
switch ($action) {
case 'get-items':
$json['items'] = $operator->getItems();
break;
[...]
}
}
if (count($json)) {
echo json_encode($json);
}
このアプローチはうまく合理的に動作しますが、私は正式なWeb開発のトレーニングを持っていたことがありません、と私は疑いが確立されている、(私はmaddeningly Googleで見つけることができません)、より良い、抽象化されたパターン。
- 「アクション」を含む「演算子」クラスの概念があまりにも曖昧であり、すべての包括的な:私の自家製のアプローチの多くの欠点は、この質問に影響を与えました。どのようにロジックを分離する必要がありますか?
- アプローチが特に乱雑になるのは、たとえば、財務ページのアイテムDBを検索する必要がある場合です。 FinancesOperatorの横にItemsOperatorも含めますか? (私は現在ロジックを複製しています)
- AjaxリクエストスクリプトとOperatorオブジェクトをインターフェースする良い方法がありますか?例えば、私は現在、URL「アクション」変数をオペレータオブジェクトの対応するメソッドにマップするスクリプトを各ページに記述する必要があります。
非常に残念ですが、この質問には余裕があります。アイデアを跳ね返す開発者はいません(実際のトレーニングはありませんでした)ので、SOコミュニティのアドバイスを聞くことは非常に貴重です。このようなスクリプトを設計する場合、可能性/アプローチ/戦略の数は完全に圧倒的である可能性があります。ある特定のアプローチで数日間投資したら、元に戻すことは非常に困難です。
ご迷惑をおかけして申し訳ありません。
これは本質的に私がやったことです。 "ajax_operators"は、ルートajax_operatorに含まれています。そして、アクションは 'page1.action1'の形式で要求されるので、別のページからの1つのページのアクションを使用できます(ユーザーがアクセスできると仮定して)。さらに、リクエストメソッド(HTTPなど)から抽象化されているため、別のページの「演算子」クラスを使用する1ページのアクションを記述できます。 – JKS