最近、PHP でカスタム MVC フレームワークを書き始めました。それは基本的に学習演習です。
私のクラスは次のディレクトリにあります。
- システム/ライブラリ/
- システム/コントローラー/
- システム/モデル
- アプリケーション/ライブラリ/
- アプリケーション/コントローラー/
- アプリケーション/モデル
名前空間と Apache 2 ハンドラー スタイルの URL (コントローラー/アクション/ID) を使用してコントローラーをインスタンス化する方法がわからないため、名前空間を使用していません。他のクラスを自動ロードする Bootstrap クラスを作成しました。
class Bootstrap
{
public function autoloadClasses($class)<br/>
{
$class .= '.php';
$classDirectories = array(
SYSTEM_LIBS_DIR,
SYSTEM_CONTROLLERS_DIR,
SYSTEM_MODELS_DIR,
APPLICATION_LIBS_DIR,
APPLICATION_CONTROLLERS_DIR,
APPLICATION_MODELS_DIR
);
foreach ($classDirectories as $classDirectory) {
$directoryIterator = new DirectoryIterator($classDirectory);
foreach($directoryIterator as $file) {
if ($file == $class) {
include $classDirectory . $class;
break 2;
}
}
}
}
public function register()
{
spl_autoload_register(array($this, 'autoloadClasses'), true);
}
public function init()
{
$this->register();
$loader = new Loader($_GET);
$controller = $loader->createController();
$controller->executeAction();
}
}
それは正常に動作します。ただし、PSR-0 で推奨されている実装を実際に使用する必要があることはわかっています。
https://gist.github.com/221634
ただし、名前空間なしで機能させる方法がわかりません。名前空間はオプションのパラメーターのようです。ただし、次のようにしても何も起こりません。Apache ログにエラーが記録されることさえありません。
$libLoader = new SplClassLoader('', 'system/libraries');