PHP源碼mvc的初始化類有個setUrl方法不能運行

來源:互聯網
上載者:User

//PrivilegeAction.class.php

//判斷常量是否定義,如果沒有定義,意味著不是請求的index.phpif(!defined('ACCESS'))exit;//初始化類class Application{    //1.    初始化字元集    private static function setHeader(){        echo __METHOD__."
"; header('Content-type:text/html;charset=utf-8'); } //2. 初始化系統常量 private static function setConst(){ echo __METHOD__."
"; //設定根目錄常量 define('ROOT_DIR',str_replace('/Core','',str_replace('\\','/',__DIR__))); //定義其他目錄 define('CORE_DIR', ROOT_DIR . '/Core'); define('ACTION_DIR', ROOT_DIR . '/Action'); define('CONF_DIR', ROOT_DIR . '/Conf'); define('MODEL_DIR', ROOT_DIR . '/Model'); define('VIEW_DIR', ROOT_DIR . '/View'); define('PUB_DIR', ROOT_DIR . '/Public'); } //3. 錯誤資訊 private static function setErrors(){ echo __METHOD__."
"; //開發環境下,顯示錯誤,顯示所有層級的錯誤 //生產環境下,不顯示錯誤,隱藏所有的層級的錯誤(系統要做好容錯處理) @ini_set('error_reporting', 1); @ini_set('display_errors', 1); } //4. 自動載入 //4.1 載入控制器類 public static function loadAction($class){ echo __METHOD__."
"; //判斷 if(is_file(ACTION_DIR . "/$class.class.php")){ include_once ACTION_DIR . "/$class.class.php"; } } //4.2 載入核心類 public static function loadCore($class){ echo __METHOD__."
"; //判斷 if(is_file(CORE_DIR . "/$class.class.php")){ include_once CORE_DIR . "/$class.class.php"; } } //4.3 載入模型類 public static function loadModel($class){ echo __METHOD__."
"; //判斷 if(is_file(MODEL_DIR . "/$class.class.php")){ include_once MODEL_DIR . "/$class.class.php"; } } //將所有的自動載入方法註冊到自動載入機制中 private static function setAutoload(){ echo __METHOD__."
"; spl_autoload_register(array('Application','loadCore')); spl_autoload_register(array('Application','loadAction')); //系統會判斷當前提供的參數是一個函數(字串)還是一個數組 //如果是一個數組:1.找到數組的第一個參數,判斷該參數,如果參數不是一個對象,系統會認為該字串是一個類名,所以在拼湊訪問的時候,會用範圍解析操作符去訪問第二個參數 //Application::loadCore(); spl_autoload_register(array('Application','loadModel')); } //5. 開啟session機制 private static function setSession(){ echo __METHOD__."
"; //開啟session @session_start(); } //6. 載入設定檔 private static function setConfig(){ echo __METHOD__."
"; $GLOBALS['config'] = include_once CONF_DIR . '/config.php'; } //7. URL初始化 private static function setUrl(){ echo __METHOD__."
"; //擷取使用者的url資訊(GET方式提交的資料) //module:請求的模組(控制器) $module = isset($_REQUEST['module']) ? $_REQUEST['module'] : 'privilege'; //action:請求的方法 $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'login';
        //處理字串        //1.    全部轉小寫        $module = strtolower($module);        $action = strtolower($action);        //2.    類的首字母大寫,方法不需要        $module = ucfirst($module);                //將擷取到的資料定義成常量用於後面的方法使用 局部變數後面是不能用的        define('MODULE',$module);        define('ACTION',$action);    }    //8.    許可權驗證    private static function setPrivilege(){        echo __METHOD__."
"; //允許存取一些不需要驗證的控制器的方法 if(!(MODULE == 'Privilege' && (ACTION == 'login' || ACTION == 'signin' || ACTION == 'captcha'))){ //都是需要驗證 if(!isset($_SESSION['user'])){ //使用者沒有登入 header('Location:index.php'); } } } //9. 分發 private static function setDispatch(){ echo __METHOD__; //找對對應的控制器類,執行個體化,再調用對應的方法即可 $module = MODULE . 'Action'; //得到控制器名字 $module = new $module(); //建立控制器對象 $action = ACTION; $module->$action(); //調用控制器中的方法 }
    //初始化方法    public static function run(){        //初始化項目        //1.初始化字元集        self::setHeader();        //2.初始化系統常量        self::setConst();        //3.錯誤資訊        self::setErrors();        //4.自動載入        self::setAutoload();        //5.session開啟        self::setSession();        //6.設定檔        self::setConfig();        //7.URL初始化        self::setUrl();        //8.許可權驗證        self::setPrivilege();        //9.分發        self::setDispatch();    }}

//indexphp

//定義一個常量,用於其他檔案的判斷//入口檔案常量define('ACCESS','ACC');//載入初始化類Application.class.phpinclude_once 'Core/Application.class.php';//調用系統初始化方法//調用Application類的靜態方法Application::run();

回複內容:

//PrivilegeAction.class.php

//判斷常量是否定義,如果沒有定義,意味著不是請求的index.phpif(!defined('ACCESS'))exit;//初始化類class Application{    //1.    初始化字元集    private static function setHeader(){        echo __METHOD__."
"; header('Content-type:text/html;charset=utf-8'); } //2. 初始化系統常量 private static function setConst(){ echo __METHOD__."
"; //設定根目錄常量 define('ROOT_DIR',str_replace('/Core','',str_replace('\\','/',__DIR__))); //定義其他目錄 define('CORE_DIR', ROOT_DIR . '/Core'); define('ACTION_DIR', ROOT_DIR . '/Action'); define('CONF_DIR', ROOT_DIR . '/Conf'); define('MODEL_DIR', ROOT_DIR . '/Model'); define('VIEW_DIR', ROOT_DIR . '/View'); define('PUB_DIR', ROOT_DIR . '/Public'); } //3. 錯誤資訊 private static function setErrors(){ echo __METHOD__."
"; //開發環境下,顯示錯誤,顯示所有層級的錯誤 //生產環境下,不顯示錯誤,隱藏所有的層級的錯誤(系統要做好容錯處理) @ini_set('error_reporting', 1); @ini_set('display_errors', 1); } //4. 自動載入 //4.1 載入控制器類 public static function loadAction($class){ echo __METHOD__."
"; //判斷 if(is_file(ACTION_DIR . "/$class.class.php")){ include_once ACTION_DIR . "/$class.class.php"; } } //4.2 載入核心類 public static function loadCore($class){ echo __METHOD__."
"; //判斷 if(is_file(CORE_DIR . "/$class.class.php")){ include_once CORE_DIR . "/$class.class.php"; } } //4.3 載入模型類 public static function loadModel($class){ echo __METHOD__."
"; //判斷 if(is_file(MODEL_DIR . "/$class.class.php")){ include_once MODEL_DIR . "/$class.class.php"; } } //將所有的自動載入方法註冊到自動載入機制中 private static function setAutoload(){ echo __METHOD__."
"; spl_autoload_register(array('Application','loadCore')); spl_autoload_register(array('Application','loadAction')); //系統會判斷當前提供的參數是一個函數(字串)還是一個數組 //如果是一個數組:1.找到數組的第一個參數,判斷該參數,如果參數不是一個對象,系統會認為該字串是一個類名,所以在拼湊訪問的時候,會用範圍解析操作符去訪問第二個參數 //Application::loadCore(); spl_autoload_register(array('Application','loadModel')); } //5. 開啟session機制 private static function setSession(){ echo __METHOD__."
"; //開啟session @session_start(); } //6. 載入設定檔 private static function setConfig(){ echo __METHOD__."
"; $GLOBALS['config'] = include_once CONF_DIR . '/config.php'; } //7. URL初始化 private static function setUrl(){ echo __METHOD__."
"; //擷取使用者的url資訊(GET方式提交的資料) //module:請求的模組(控制器) $module = isset($_REQUEST['module']) ? $_REQUEST['module'] : 'privilege'; //action:請求的方法 $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'login';
        //處理字串        //1.    全部轉小寫        $module = strtolower($module);        $action = strtolower($action);        //2.    類的首字母大寫,方法不需要        $module = ucfirst($module);                //將擷取到的資料定義成常量用於後面的方法使用 局部變數後面是不能用的        define('MODULE',$module);        define('ACTION',$action);    }    //8.    許可權驗證    private static function setPrivilege(){        echo __METHOD__."
"; //允許存取一些不需要驗證的控制器的方法 if(!(MODULE == 'Privilege' && (ACTION == 'login' || ACTION == 'signin' || ACTION == 'captcha'))){ //都是需要驗證 if(!isset($_SESSION['user'])){ //使用者沒有登入 header('Location:index.php'); } } } //9. 分發 private static function setDispatch(){ echo __METHOD__; //找對對應的控制器類,執行個體化,再調用對應的方法即可 $module = MODULE . 'Action'; //得到控制器名字 $module = new $module(); //建立控制器對象 $action = ACTION; $module->$action(); //調用控制器中的方法 }
    //初始化方法    public static function run(){        //初始化項目        //1.初始化字元集        self::setHeader();        //2.初始化系統常量        self::setConst();        //3.錯誤資訊        self::setErrors();        //4.自動載入        self::setAutoload();        //5.session開啟        self::setSession();        //6.設定檔        self::setConfig();        //7.URL初始化        self::setUrl();        //8.許可權驗證        self::setPrivilege();        //9.分發        self::setDispatch();    }}

//indexphp

//定義一個常量,用於其他檔案的判斷//入口檔案常量define('ACCESS','ACC');//載入初始化類Application.class.phpinclude_once 'Core/Application.class.php';//調用系統初始化方法//調用Application類的靜態方法Application::run();

這裡應該不是setUrl沒有運行,而是在之前的setConfig裡就掛掉了。
注意檢查setConfig 裡的 $GLOBALS['config'] = include_once CONF_DIR . '/config.php';
看看 config.php 裡的內容是否正確。

設定檔錯了

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.