これをどう表現すればいいのかわかりませんが、やってみます。
最近、オブジェクト指向 PHP でポートフォリオのコーディングを開始しましたが、SQL データと $_GET 変数に応じてコンテンツが変化する単一ページを使用することがベスト プラクティスに従っているかどうか疑問に思っています。
ある/ない場合、その理由は?
編集:私の次の投稿、より詳細な詳細を見てください。
単一のファイルがすべてのリクエストを処理するフロント コントローラー パターンの使用についてお尋ねですか? 多くの場合、これは index.php と mod_rewrite ですべてのリクエストを取得し、URL の残りの部分をクエリ文字列のパラメーターとして指定することで行われます。
http://www.onlamp.com/pub/a/php/2004/07/08/front_controller.html
このパターンをアプリケーションに使用することをお勧めします。これは、認証などを処理する単一の場所を提供し、多くの場合、新しい機能がコントローラーに登録されているクラスである、より緊密なレベルで物事を統合する必要があるためです。いくつかのメカニズムを介して、非常に理にかなっています。
他の人が言及した URL に関する懸念は正確ではありません。なぜなら、Web サイトを構築する古代の手法を使用していない限り、URL 構造とファイル構造の間に実際の関係はないからです。Apache の機能の大部分は、ファイル/ディレクトリ構造と URL 構造が別個の概念であるという概念に基づいています (エイリアス モジュール、書き換えモジュール、コンテンツ ネゴシエーションなど)。
セッション変数などを使用してどのコードを含める必要があるかを判断する単一のランディング ページ (index.php など) を意味する場合、はい、これはよく使用される手法です。
編集:そして上記は、ダニエル・パパシアンが彼の優れた投稿で詳細に説明していることを意味します
HTML、SQL、および PHP のすべてを 1 つのファイルに配置するつもりなら、GateKiller が指摘した理由により、いいえ。
実際のページ ファイルには、そのページがサイトの標準的な「ページ」と異なる部分のみを含める必要があります (たとえば、ページ タイトル、インデックス ページには最新ニュースを取得するためのコードが含まれる場合があります)。複数の場所で使用されている (または使用される可能性がある) すべてのものは、外部の php ファイルに移動して含める必要があります。例は次のとおりです。
これにより、コードの管理がはるかに簡単になります。たとえば、データベースのパスワードを変更した場合、更新が必要なファイルは 1 つだけです。または、ヘッダーにバナーを追加することにした場合、すべてのページを変更する必要があるのではなく、1 つのページのみを変更する必要があります。
また、新しい機能を追加する作業が大幅に軽減されます。たとえば、新しいページは次のようになります。
<?php
require ('config.php')
require ('start.php')
require ('header.php')
//custom page stuff
require ('footer.php')
?>
または Cookie による自動ログインの追加は、Login() 関数 (Cookie の作成) と start.php (Cookie のチェック + Login() の呼び出し) への簡単な変更です。
また、将来これらのファイルを他のプロジェクトに簡単に転送することもできます。
興味のある方のために、この正確なモデルを使用するフレームワークがあります。元は ColdFusion 用です。この方法論にはまだコミュニティがあり、約 1 年前 (2007 年 12 月) にバージョン 5.5 がリリースされました。
私はしばしば .php 拡張子のない php ファイル (すなわちサイト) を使用し、追加します
<Files site>
ForceType application/x-httpd-php
</Files>
Apacheにファイルをphpファイルとして解釈させる.htaccessに。
URL 内のファイルに変数を解析できます: http://www.yourdomain.com/site/var1/var2/var3
使用する
$var_array = explode("/",$_SERVER['REQUEST_URI']);
$var1 = $var_array[1];
$var2 = $var_array[2];
$var3 = $var_array[3];
変数を取得します。このようにして、modrewrite を使用せずに、検索に適した URL を持つ単一のファイルを使用できます。
ゲートキラーが言及したすべてのもの + 遅延バインディングも利用できません。
バージョン管理を使用している場合、サイトの単一の「ページ」に発生した可能性のある変更をロールバックするのは非常に困難です。後に来る可能性のあるもののために再びマージする必要があるため
mod rewrite を使用しない限り、検索エンジンに適していません。
あなたのサイトがカスタム CMS などで管理されている場合、1 つのページを使用しない理由はありません。
しばらく前に書いたCMSで同様のことをしました。すべてのクライアントには、テーマ、コンテンツ、添付ファイル、およびメンバーのアクセス許可についてデータベースにクエリを実行する単一の default.asp ページがありました。変更を加えるには、一度変更を加え、変更が必要な場合は他のクライアントにコピーしました。
もちろん、これはほとんどのシナリオでは機能しません。多くの異なることを行う Web サイトがある場合 (私の cms は、ページの読み込み中に特定の機能を繰り返しただけです)、複数のページが本当に唯一の方法です。
このスクリーンダンプと次の説明は、現時点で私のコードがどのように見えるかについてのより良いアイデアを与えるかもしれません.
私は、'Internet Friend'、Daniel Papasian、および他の数人が言及しているものと同じモデルを使用しています。フロントコントローラー。
私のインデックスページはこんな感じです。
require_once 'config.php';
require_once 'class_lib/template.php';
$template = new template($config);
$template->dataQuery();
$template->pageCheck();
$template->titleAssembly();
$template->cssAssembly();
$template->metaAssembly();
$template->menuAssembly();
$template->content();
echo $template->publish();
クラス コンストラクトは、メイン テンプレート ファイルを開き、生成されたコードでタグを置き換えることによって各メソッドが操作できる変数にロードします。mod_rewrite を使用してクリーンアップするので、醜い URL は実際には問題になりません。
ただし、Papasian にはポイントがあります。この方法は、Web ベースのアプリケーションなどに適しています。
そもそも私の質問にあまり具体的でなかったことをお詫びします。
さらに、支援のために数行をドロップしてくれたすべての人に大きな「ありがとう」を言います。
re: URL とファイル構造
すべてのコンテンツがデータベースにあり、index?p=434 モデルでアクセスするサイトを変換しました。データベースを使用しても何のメリットもありませんでした。コンテンツを追加する必要がある人は、ブラウザでコンテンツを編集する必要があり、ページは単なる数字であるため、サイトは混乱していました。
すべてのコンテンツを取り出して、別のファイルに入れました。それぞれに分かりやすい名前が付けられ、フォルダーに整理されていました。各ファイルは次のようになります。
require('sitelib');
do_header('about', 'About Us');
// content here
do_footer();
クライアントはそれを気に入りました。彼らは、任意の HTML エディターを使用してアクセスし、適切なファイルを見つけて変更を加えることができました。そして彼らは新しいページを作ることができました。つまり、URL とファイル構造を一致させると便利な場合があります。