PHP源码mvc的初始化类有个setUrl方法不能运行
//PrivilegeAction.class.php
<code>//判断常量是否定义,如果没有定义,意味着不是请求的index.php if(!defined('ACCESS'))exit; //初始化类 class Application{ //1. 初始化字符集 private static function setHeader(){ echo __METHOD__."<br>"; header('Content-type:text/html;charset=utf-8'); } //2. 初始化系统常量 private static function setConst(){ echo __METHOD__."<br>"; //设置根目录常量 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__."<br>"; //开发环境下,显示错误,显示所有级别的错误 //生产环境下,不显示错误,隐藏所有的级别的错误(系统要做好容错处理) @ini_set('error_reporting', 1); @ini_set('display_errors', 1); } //4. 自动加载 //4.1 加载控制器类 public static function loadAction($class){ echo __METHOD__."<br>"; //判断 if(is_file(ACTION_DIR . "/$class.class.php")){ include_once ACTION_DIR . "/$class.class.php"; } } //4.2 加载核心类 public static function loadCore($class){ echo __METHOD__."<br>"; //判断 if(is_file(CORE_DIR . "/$class.class.php")){ include_once CORE_DIR . "/$class.class.php"; } } //4.3 加载模型类 public static function loadModel($class){ echo __METHOD__."<br>"; //判断 if(is_file(MODEL_DIR . "/$class.class.php")){ include_once MODEL_DIR . "/$class.class.php"; } } //将所有的自动加载方法注册到自动加载机制中 private static function setAutoload(){ echo __METHOD__."<br>"; 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__."<br>"; //开启session @session_start(); } //6. 加载配置文件 private static function setConfig(){ echo __METHOD__."<br>"; $GLOBALS['config'] = include_once CONF_DIR . '/config.php'; } //7. URL初始化 private static function setUrl(){ echo __METHOD__."<br>"; //获取用户的url信息(GET方式提交的数据) //module:请求的模块(控制器) $module = isset($_REQUEST['module']) ? $_REQUEST['module'] : 'privilege'; //action:请求的方法 $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'login'; </code>
<code> //处理字符串 //1. 全部转小写 $module = strtolower($module); $action = strtolower($action); //2. 类的首字母大写,方法不需要 $module = ucfirst($module); //将获取到的数据定义成常量用于后面的方法使用 局部变量后面是不能用的 define('MODULE',$module); define('ACTION',$action); } //8. 权限验证 private static function setPrivilege(){ echo __METHOD__."<br>"; //放行一些不需要验证的控制器的方法 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(); //调用控制器中的方法 } </code>
<code> //初始化方法 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(); } } </code>
//indexphp
<code>//定义一个常量,用于其他文件的判断 //入口文件常量 define('ACCESS','ACC'); //加载初始化类Application.class.php include_once 'Core/Application.class.php'; //调用系统初始化方法 //调用Application类的静态方法 Application::run();</code>
回复内容:
//PrivilegeAction.class.php
<code>//判断常量是否定义,如果没有定义,意味着不是请求的index.php if(!defined('ACCESS'))exit; //初始化类 class Application{ //1. 初始化字符集 private static function setHeader(){ echo __METHOD__."<br>"; header('Content-type:text/html;charset=utf-8'); } //2. 初始化系统常量 private static function setConst(){ echo __METHOD__."<br>"; //设置根目录常量 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__."<br>"; //开发环境下,显示错误,显示所有级别的错误 //生产环境下,不显示错误,隐藏所有的级别的错误(系统要做好容错处理) @ini_set('error_reporting', 1); @ini_set('display_errors', 1); } //4. 自动加载 //4.1 加载控制器类 public static function loadAction($class){ echo __METHOD__."<br>"; //判断 if(is_file(ACTION_DIR . "/$class.class.php")){ include_once ACTION_DIR . "/$class.class.php"; } } //4.2 加载核心类 public static function loadCore($class){ echo __METHOD__."<br>"; //判断 if(is_file(CORE_DIR . "/$class.class.php")){ include_once CORE_DIR . "/$class.class.php"; } } //4.3 加载模型类 public static function loadModel($class){ echo __METHOD__."<br>"; //判断 if(is_file(MODEL_DIR . "/$class.class.php")){ include_once MODEL_DIR . "/$class.class.php"; } } //将所有的自动加载方法注册到自动加载机制中 private static function setAutoload(){ echo __METHOD__."<br>"; 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__."<br>"; //开启session @session_start(); } //6. 加载配置文件 private static function setConfig(){ echo __METHOD__."<br>"; $GLOBALS['config'] = include_once CONF_DIR . '/config.php'; } //7. URL初始化 private static function setUrl(){ echo __METHOD__."<br>"; //获取用户的url信息(GET方式提交的数据) //module:请求的模块(控制器) $module = isset($_REQUEST['module']) ? $_REQUEST['module'] : 'privilege'; //action:请求的方法 $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'login'; </code>
<code> //处理字符串 //1. 全部转小写 $module = strtolower($module); $action = strtolower($action); //2. 类的首字母大写,方法不需要 $module = ucfirst($module); //将获取到的数据定义成常量用于后面的方法使用 局部变量后面是不能用的 define('MODULE',$module); define('ACTION',$action); } //8. 权限验证 private static function setPrivilege(){ echo __METHOD__."<br>"; //放行一些不需要验证的控制器的方法 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(); //调用控制器中的方法 } </code>
<code> //初始化方法 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(); } } </code>
//indexphp
<code>//定义一个常量,用于其他文件的判断 //入口文件常量 define('ACCESS','ACC'); //加载初始化类Application.class.php include_once 'Core/Application.class.php'; //调用系统初始化方法 //调用Application类的静态方法 Application::run();</code>
这里应该不是setUrl
没有运行,而是在之前的setConfig
里就挂掉了。
注意检查setConfig
里的 $GLOBALS['config'] = include_once CONF_DIR . '/config.php';
看看 config.php
里的内容是否正确。
配置文件错了

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

In this chapter, we will understand the Environment Variables, General Configuration, Database Configuration and Email Configuration in CakePHP.

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

To work with date and time in cakephp4, we are going to make use of the available FrozenTime class.

To work on file upload we are going to use the form helper. Here, is an example for file upload.

In this chapter, we are going to learn the following topics related to routing ?

CakePHP is an open-source framework for PHP. It is intended to make developing, deploying and maintaining applications much easier. CakePHP is based on a MVC-like architecture that is both powerful and easy to grasp. Models, Views, and Controllers gu

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

Validator can be created by adding the following two lines in the controller.
