名前空間なしで、当時のチームによって作成された「プライベートフレームワーク」を使用して開発されたプロジェクトがあります。このフレームワークは、フレームワーク内からファイルをインクルードし、プロジェクト内のファイルを自動的に検索する自動ロード機能に依存しています。つまり、プロジェクト内には0のインクルード/必須があります。すべてのファイルは特定のルールに従い、私の関数に含まれます。
サードパーティのライブラリを使用するたびに、ファイルをダウンロードして特定の場所に配置し、ファイルプロパティの読み込みに取り組みます。
今週、使いたい新しいライブラリを見つけたので、composer経由でインストールすることにしました。現在、自動ロード機能は存在せず、フレームワークは不足しているファイルの実行を開始時に停止します。
自動ロードをそのままにして(プロジェクトとフレームワークからの名前空間のないファイルを含む)、composerを使用するにはどうすればよいですか?それは可能ですか、それとも私は死んでいますか?
編集:質問にいくつかのファイルを追加します。
<?php
$dir = dirname(__FILE__);
// Database Package
require $dir . '/nav/database/NavDao.php';
require $dir . '/nav/database/NavDatabase.php';
require $dir . '/nav/database/NavTable.php';
// General
require $dir . '/nav/general/NavLanguage.php';
require $dir . '/nav/general/NavProject.php';
require $dir . '/nav/general/NavController.php';
// Tool
require $dir . '/nav/tool/NavValidator.php';
require $dir . '/nav/tool/NavLogger.php';
require $dir . '/nav/tool/NavListener.php';
require $dir . '/nav/tool/NavFile.php';
require $dir . '/nav/tool/NavEmail.php';
require $dir . '/nav/tool/NavException.php';
// View
require $dir . '/nav/view/NavPage.php';
require $dir . '/nav/view/NavTemplate.php';
require $dir . '/nav/view/NavView.php';
// Request
require $dir . '/nav/request/NavRequest.php';
require $dir . '/nav/request/NavAccess.php';
require $dir . '/nav/request/NavResponse.php';
require $dir . '/nav/request/NavSession.php';
// Plugin
NavProject::plugin(
array(
'NavMail' => $dir . '/nav/plugin/email/NavMail.php',
'NavXPertMailer2006' => $dir . '/nav/plugin/email/NavXPertMailer2006.php',
'NavLog' => $dir . '/nav/plugin/log/NavLog.php',
'NavImage' => $dir . '/nav/plugin/file/NavImage.php',
'NavMysql' => $dir . '/nav/plugin/dbms/NavMysql.php',
'NavOracle' => $dir . '/nav/plugin/dbms/NavOracle.php',
'NavTranslate' => $dir . '/nav/plugin/translate/NavTranslate.php'
));
require $dir . '/vendor/autoload.php';
?>
function __autoload($className) {
$file = '';
// Auto Load Template
if (strpos($className, 'Template') !== false)
$file = NavProject::path() . 'class/view/template/' . $className . '.php';
// Auto Load Project Tools
else if (strpos(strtolower($className), strtolower(NavProject::name())) !== false)
$file = NavProject::path() . 'class/tool/' . $className . '.php';
// Auto Load Controllers
else if (strpos($className, 'Controller') !== false)
$file = NavProject::path() . 'class/control/' . $className . '.php';
// Auto Load Nav Plugin
else if (strpos($className, 'Nav') === 0) {
$list = NavProject::plugin();
foreach ($list as $plugin => $location)
if ($plugin == $className)
$file = $location;
// Auto Load Model
} else {
$file = NavProject::path() . 'class/model/' . $className . '.php';
}
if (is_file($file))
require $file;
}
__autoloadをspl_autoload_register();に置き換えてみてください。
どうして?
__autoload();
は推奨されておらず、将来的には非推奨になるか、ドキュメントから削除される可能性があります。
この関数はspl_autoload_register()
、composerが使用する関数と衝突する可能性があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加