0

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);
        }
    }
}
?>
4

0 に答える 0