Open4
PHP 自作MVCフレームワークメモ
自作フレームワーク作成中の気づきメモ
ルーティングのコントローラーとアクションをキャメルケース、アッパーキャメルケースに変換してクラス、メソッドを探す。
存在しなければException
spl_autoload_register()でautoloadする
spl_autoload_register()はインスタンス化の際、requireされてないクラスを探しに行くフックを記述することができる
spl_autoload_register(function ($class) {
$root = dirname(__DIR__); // get the parent directory
$file = $root . '/' . str_replace('\\', '/', $class) . '.php';
if (is_readable($file)) {
require $root . '/' . str_replace('\\', '/', $class) . '.php';
}
});
__callマジックメソッドを利用し、呼び出されたアクションメソッドが存在しない場合は、
call_user_func_array()で~Actionメソッドが呼び出せる
public function __call(string $name, array $args)
{
$method = $name . 'Action';
if (method_exists($this, $method)) {
call_user_func_array([$this, $method], $args);
}
} else {
echo "Method $method not found in controller " . get_class($this);
}
}