2

より経験豊富な開発者のアドバイスに従って、私は常に、ユーザー入力 (フォーム処理、データベース管理など) を必要とする Web ページを自己参照ページとしてコーディングしてきました。PHP ページの場合、フォームのアクションを定義済み変数の'PHP_SELF'要素に設定し$_SERVER、渡す引数に応じて、ページ ロジックが実行するコード ブロックを決定します。

すべてのコードが 1 つのファイルに含まれていて、さまざまな結果ページに分散していない点が気に入っています。私が見つけた 1 つの問題は、統計解析プログラムが、ページの最初のビューとその後のビュー (たとえば、フォームが送信されたとき) を区別できないことです。昔、CGI や CF を使ってページを作成したとき、フォームが実際に使用された回数が非常にきれいに表示される別の結果ページにユーザーを誘導しました。

Web 開発におけるこれらのタイプのページのベスト プラクティスは何ですか? 自己参照ページを使用する (または使用しない) 他に説得力のある理由はありますか?

4

5 に答える 5

5

自己参照ページは、あなたが言うように、関心の分離に従わないと主張します。同じページで2つの異なることを行っています。ロジックをより明確に分離すると、2つの異なるページでそれらを行うことができます。

このプラクティスは、Ruby on Rails、Django、ASP.NET MVCなどのMVC(model-view-controller、 http://en.wikipedia.org/wiki/Model-view-controller )フレームワークによって強調されています(私はしません頭のてっぺんからPHPを知っている人もいますが、確かにいくつかあります)。

これは、RESTful(REpresentational State Transfer)プラクティスの重要な機能でもあり、各URLはリソースと、そのリソースで実行される単一のアクションを表します。一方、自己参照ページには、URL /ページごとに「新規」(フォームに入力するため)や「作成」(実際にオブジェクトを作成するため)などの「2」のアクションがあります。

WebサイトでMVCとRESTful(http://en.wikipedia.org/wiki/RESTful)を実践すると、多くの場合、コードがよりクリーンになり、関心の分離が向上します。これが重要である理由は、テストが簡単になるためです(テストとは、「ブラウザーでページを試す」テストではなく、ユニットテストと機能テストを意味します)。

統計の乱雑さは、懸念事項を分離しないと、意図しない複雑さにつながる可能性があることの例です。一部の人々は、リクエストのリファラーを検出し、それが同じページであるかどうかを確認することで、この問題に取り組む可能性があります。これらはすべて、問題を修正するのではなく、症状に対処する単なるコード包帯です。Webサイトのさまざまなページでさまざまな「アクション」を保持する場合は、それらのページを1つのジョブに集中させて、コードをあらゆる種類の条件や追加の複雑さで乱雑にするのではなく、それらがうまく機能するようにすることができます。 1ページには1つのジョブしかありません。

于 2008-09-24T19:25:42.623 に答える
1

フォームを処理するための単一ファイル アプローチの背後にある最も強力な議論は、単純に保守が簡単だということです。

悪魔の擁護者を演じさせてください: 元の 2 ファイル アプローチが機能し、測定可能である場合、なぜそれを変更する必要がありますか?

一方、単純な連絡先フォームの送信として私が想像しているものよりも複雑なものを扱っている場合 (たとえば) 、Web 統計パッケージに依存するのではなく、アクションをログに記録する方法を学ぶ必要があるかもしれません。 .

于 2008-09-24T19:33:32.790 に答える
1

フォーム (ファイル内のスクリプトによって生成される) に記入するよう誰かに依頼する場合、エラー チェックを一番上に配置してから、フォームを再生成できるように、同じスクリプトに返信するのが好きです。エラーが見つかった場合のフォーム。これにより、フォーム生成を一度記述し、入力が受け入れられるまで再利用できます (つまり、「赤で表示されたフィールドを修正してください」など)。

入力がすべてのサニティ チェックに合格したら、同じスクリプトから結果ページを発行するか、別のスクリプトを呼び出すことができます。どちらが状況に適しているかによって異なります。しかし、個人的には、あなたが説明した自己参照スクリプトに問題はないと思います。

とは言うものの、フォームの生成とエラー チェックを行うために、私は常にジェネリック コードとライブラリを呼び出すので、この "共有" フォーム生成コードでさえかなりコンパクトでシンプルになります。

于 2008-09-24T19:35:30.040 に答える
0

考えられるオプションの 1 つは、同じ URL を指す mod_rewrite エイリアスを設定することです。例えば:

RewriteEngine on
RewriteRule ^form$ form.php [QSA]
RewriteRule ^form/submit$ form.php [QSA]

これにより、同じファイル内のコードを維持しながらリクエストを追跡できます。

于 2008-09-24T19:18:05.853 に答える
0

別のページを使用して、結果ページにフォーム ページを含めることができます。

于 2008-09-24T19:20:04.010 に答える