19

初めての PHP アプリを作成しています。誰もがアプリを初期化する必要があると話していbootstrap.phpます。これは理にかなっており、満足できるものをまとめました。私が理解していないことが 2 つありますが、誰も言及していないようです。

  1. どこからブーストラップを呼び出すのですか? すべてのページに含めますか? 何か良い方法があれば教えてください...

  2. ブートストラップが必要以上に頻繁に呼び出されないようにするにはどうすればよいですか? アプリの開始時または新しいセッションの開始時にのみ呼び出す必要があると思います。

4

5 に答える 5

13

1: 通常、ブートストラップは「アプリケーション」ディレクトリにあります。これは、アプリケーションと同じレベル (内部ではない) にある "public" ディレクトリから呼び出されます。public フォルダー内の index.php には、bootstrap.php が含まれている必要があり、そこに Document_Root を設定する必要があります (動作させるには、いくつかのインクルード パスを変更または追加する必要がある場合があることに注意してください)。

2: public フォルダーの index.php ファイルを介して 1 回だけ含める必要があります。それが正しく行われていれば、それを含めるだけで十分なはずです。

それが役立つことを願っています。

于 2010-07-22T22:19:58.463 に答える
9

アプリケーションのアーキテクチャによって異なります。

アーキテクチャが古き良き「php スクリプトの群れ」(ブラウザから直接呼び出される PHP スクリプト) である場合、何らかの方法で各スクリプトの先頭にそれを含めることになります。

最近のほとんどの開発者 (およびフレームワーク) は、/index.php を介してすべてのリクエストを何らかの方法でマーシャリングします。通常は、ユーザーが見やすいきれいな URL を作成するために URL の書き換えが行われます。

今の時代、あなたはおそらく後者を行うべきか、少なくともそれについて考えるべきです。これにより、組織が大幅に改善され、さらに重要なことに、すべてのコードを Web サーバーのドキュメント ルートの外に置くことができます。これは、この回答の範囲外のいくつかの理由から、優れたセキュリティ プラクティスです。

于 2010-07-22T22:51:29.837 に答える
6

singleton patternを見てください。ブートストラップ クラスをリソース コンテナーとして倍増できます。

$bootstrap = Bootstrap::getInstance();
$dbConn = $bootstrap->getPdoDbh();

ファイルincludeまたはrequireオートローダーを使用して、すべてのページでオブジェクトをインスタンス化する呼び出しがあることを確認してください。getInstance()クラス定義の後、ファイルの一番下に を呼び出すことさえあるかもしれません。

または、Zend Framework のように、URL ベースのルーティングを使用して、すべてのリクエストが単一の index.php ファイルを通過するようにすることもできます。または、さらに良いことに、Zend Frameworkを使用してください。

この回答は、PHP >=5 で OOP を実行していることを前提としています。これが実際に進むべき道です。

于 2010-07-22T22:25:34.457 に答える
1

ブートストラップファイルの機能によって異なります。正常な実行環境を作成し、データベース接続を確立するためにいくつかの ini 設定などを設定する単なるファイルである場合は、スクリプトに require_once でそれを含めるだけで十分です。単一のエントリポイントである場合は、サーバーへのすべてのリクエストをフィルター処理し、適切なコントローラースクリプトにディスパッチするようにサーバーを構成できます。

于 2010-07-22T22:21:48.457 に答える