したがって、私のプロジェクトは MVC フレームワークを使用しており、サーバーからコンテンツを取得するために実行する Ajax スクリプトを含むページがあります。PHP スクリプトが Ajax スクリプトで呼び出されたときに、PHP スクリプトで使用するためにライブラリに既にあるクラスにアクセスしたいと考えています。これを行うには、私が ajaxBootstrap と呼んでいるものを使用して、特定の Ajax スクリプトに必要なオブジェクトをインスタンス化する適切な関数を呼び出します。
ライブラリからこれらのクラスをロードするために、ajaxBootstrap に autoload 関数があるため、require および include ステートメントを大量に使用する必要はありません。私の問題は、オートロード機能のパスの問題により、これらのファイルがロードされていないことです。同じパスでrequireステートメントを使用すると、クラスは問題なくロードされます.autoload関数を使用してクラスをロードしようとすると、500内部サーバーエラーが発生します。
ここに私の ajaxBootstrap ファイルがあります:
// This file routes Ajax requests made in JS files and instantiates a specific object to carry out the actions needed for that particular Ajax operation
// Autoload any classes that are required
function autoLoad($classToLoad)
{
if(file_exists('../library/' . $classToLoad . 'class.php')) // File in the library folder
{
require('../library/' . $classToLoad . '.class.php');
}
else if(file_exists('../../app/models/' . $classToLoad . 'class.php')) // File in the models folder
{
require('../../app/models/' . $classToLoad . '.class.php');
}
}
spl_autoload_register('autoLoad');
// Determine which function to call based on the url that's listed in the Ajax request
switch($_GET['action'])
{
case 'pageOne':
pageOne();
break;
case 'pageTwo':
pageTwo();
break;
}
function pageOne()
{
$test = new Test();
$test->funcThatReturnStuff();
}
function pageTwo()
{
$test2 = new Test2();
$test2->funcThatReturnStuff();
}
前に述べたように、次のような require ステートメントを使用する場合:
require('../library/Test.class.php');
$test = new Test();
$test->funcThatReturnStuff();
クラスがロードされ、問題なく動作します。ただし、オートローダー関数で同じパスを使用すると、エラーがスローされます。本当に奇妙なことは、私の ajaxBootstrap があるフォルダーからクラスをロードするオートローダーに else if ステートメントを入れると、それも正常に動作することです...
私はrequireステートメントを使用するだけで問題を解決できることを知っていますが、プロジェクトをスケーリングできるようにしたいと考えており、将来的に大量のrequireステートメントを使用する必要はありません. ところで、「../」を使用して、ajaxBootstrap ファイルの場所から他のフォルダーに移動します。
また、以前の投稿に追加するために、を../
使用して絶対パスに置き換えてみましたが、どちらdefine('ROOT', dirname(__FILE__) . '/')
も機能せず、Firebug で内部サーバー エラーが発生しました。define('ROOT', $_SERVER['DOCUMENT_ROOT'] . '/path/to/folder/')
さらに、エラーログにもエラーはありません。