web-dev-qa-db-ja.com

PHPブートストラップの基本

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

  1. ブーストラップはどこから呼び出しますか?すべてのページに含めますか?もっと良い方法があると言ってください...

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

19
BenV

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

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

お役に立てば幸いです。

13
Brad F Jacobs

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

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

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

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

8
timdev

シングルトンパターン を見てください。 bootstrapクラスをリソースコンテナとして2倍にすることができます。例:

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

ファイルをincludeまたはrequireするか、オートローダーを使用して、すべてのページでオブジェクトをインスタンス化するための呼び出しがあることを確認できます。クラス定義の後で、ファイルの最後にgetInstance()を呼び出すこともできます。

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

この答えは、あなたがOOP w/PHP> = 5を実行していることを前提としています。これが実際の方法です。

5
aib

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

1
Timothy

bootstrap a PHPアプリケーションは、Composerを使用してこれを行うためのより洗練された手段の1つです。

ほとんどすべてのPHPライブラリはComposerを使用しており、Bootstrap.phpのようなファイルを要求するのは次のように簡単です。

"autoload": {
    "psr-4": {
        "Acme\\Rocket\\": "src/"
    },
    "files": ["src/Bootstrap.php"]
},

2番目のプロパティfilesに注意してください。 (最初のpsr-4は、標準のPSR-4ボイラープレート自動読み込みであり、例をより現実的なものにするためにのみ含まれています。)

このようにbootstrapファイルを含めることは、PHPアプリケーションがindex.phpなどを介してWebサーバーコンテキストで実行されるという素朴な仮定をしません;アプリケーションはコマンドラインアプリケーション(またはLaravel/Artisanのように両方)である可能性が非常に高いです。オートローダーを介したブートストラップにより、この区別は問題になりません。

1
Ben Johnson