MVC のローダーにオートローダーを追加して、require と include の必要性をすべて削除しようとしています。
オートローダーは、以前に使用したことがあるので機能します。
私が知る必要があるのは、このコードを更新してすべての「require」を削除する方法です。
変更する必要があるビットは、コントローラーのクラスファイルが存在するかどうかを確認する createController() メソッドのすぐ内側にあると思います
<?php
class Loader {
private $controllerName;
private $controllerClass;
private $action;
private $urlValues;
//store the URL request values on object creation
public function __construct() {
$this->urlValues = $_GET;
if ($this->urlValues['controller'] == "") {
$this->controllerName = "home";
$this->controllerClass = "HomeController";
} else {
$this->controllerName = strtolower($this->urlValues['controller']);
$this->controllerClass = ucfirst(strtolower($this->urlValues['controller'])) . "Controller";
}
if ($this->urlValues['action'] == "") {
$this->action = "index";
} else {
$this->action = $this->urlValues['action'];
}
}
//factory method which establishes the requested controller as an object
public function createController() {
//check our requested controller's class file exists and require it if so
if (!file_exists("controllers/class." . $this->controllerName . ".php")) {
require("controllers/class." . $this->controllerName . ".php");
} else {
require("controllers/class.error.php");
return new ErrorController("badurl",$this->urlValues);
}
//does the class exist?
if (class_exists($this->controllerClass)) {
$parents = class_parents($this->controllerClass);
//does the class inherit from the BaseController class?
if (in_array("BaseController",$parents)) {
//does the requested class contain the requested action as a method?
if (method_exists($this->controllerClass,$this->action))
{
return new $this->controllerClass($this->action,$this->urlValues);
} else {
//bad action/method error
//require("controllers/error.php");
return new ErrorController("badurl",$this->urlValues);
}
} else {
//bad controller error
//require("controllers/error.php");
return new ErrorController("badurl",$this->urlValues);
}
} else {
//bad controller error
//require("controllers/error.php");
return new ErrorController("badurl",$this->urlValues);
}
}
}
?>