名前空間を利用するようにディスパッチャーを変更しています。
私のオートローダーは非常に標準的で、次のようになっています。
$paths = array(
get_include_path(),
ROOT . DS . 'library' . DS . 'intranet' . DS . 'classes',
ROOT . DS . 'application',
);
set_include_path(join(PATH_SEPARATOR, $paths));
spl_autoload_register();
私のルーターは少し混乱していますが、これまでのところ、
$url = explode('/', trim($_SERVER['REQUEST_URI'], '/'));
$controller = !empty($url[0]) ? 'controller\\'.$url[0] : 'controller\\home';
$method = !empty($url[1]) ? $url[1] : 'index';
$params = !empty($url[2]) ? $url[2] : $_POST;
if (class_exists($controller)){
$dispatchedController = "new $controller()";
if (! method_exists($controller, $method)){
trigger_error("{$controller}::{$method}() Method does not exist!");
$error = new ErrorHandler();
$error->invalidDispatch(debug_backtrace(),$controller, $method);
return;
}
return $dispatchedController::$method;
} else{
trigger_error("{$controller}::{$method}({$params}) Method does not exist!");
$error = new ErrorHandler();
$error->invalidDispatch(debug_backtrace(), $controller, $method);
return;
}
}
ただし、失敗し続けますreturn $dispatchedController::$method;
たとえば、クラスファイルを見てみましょうhome
:
名前空間コントローラー;
class home
{
public function index(){
echo "cool!";
}
}
エラーが発生しています:Fatal error: Class 'new controller\home()' not found in /public/library/intranet/classes/router.php on line 30
ディスパッチャを変更するにはどうすればよいですか?