検索
ホームページバックエンド開発PHPチュートリアル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>

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>

PHP源码mvc的初始化类有个setUrl方法不能运行

这里应该不是setUrl没有运行,而是在之前的setConfig里就挂掉了。
注意检查setConfig 里的 $GLOBALS['config'] = include_once CONF_DIR . '/config.php';
看看 config.php 里的内容是否正确。

配置文件错了

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
どのデータをPHPセッションに保存できますか?どのデータをPHPセッションに保存できますか?May 02, 2025 am 12:17 AM

phpssionscanStorestrings、numbers、arrays、andobjects.1.strings:textdatalikeusernames.2.numbers:integersorfloatsforcounters.3.arrays:listslikeshoppingcarts.4.objects:complextructuresthataresialized。

どのようにPHPセッションを開始しますか?どのようにPHPセッションを開始しますか?May 02, 2025 am 12:16 AM

tostartaphpsession、outsession_start()atthescript'sbeginning.1)placeitbe foreanyouttosetthesscookie.2)usesionsionsionsionserdatalikelogintatussorshoppingcarts.3)再生セッションインドストップレベントフィックスアタック

セッションの再生とは何ですか?また、セキュリティをどのように改善しますか?セッションの再生とは何ですか?また、セキュリティをどのように改善しますか?May 02, 2025 am 12:15 AM

セッション再生とは、新しいセッションIDを生成し、セッション固定攻撃の場合にユーザーが機密操作を実行するときに古いIDを無効にすることを指します。実装の手順には次のものが含まれます。1。感度操作を検出、2。新しいセッションIDを生成する、3。古いセッションIDを破壊し、4。ユーザー側のセッション情報を更新します。

PHPセッションを使用する際のパフォーマンスの考慮事項は何ですか?PHPセッションを使用する際のパフォーマンスの考慮事項は何ですか?May 02, 2025 am 12:11 AM

PHPセッションは、アプリケーションのパフォーマンスに大きな影響を与えます。最適化方法には以下が含まれます。1。データベースを使用してセッションデータを保存して応答速度を向上させます。 2。セッションデータの使用を削減し、必要な情報のみを保存します。 3.非ブロッキングセッションプロセッサを使用して、同時実行機能を改善します。 4.セッションの有効期限を調整して、ユーザーエクスペリエンスとサーバーの負担のバランスを取ります。 5.永続的なセッションを使用して、データの読み取り時間と書き込み時間を減らします。

PHPセッションはCookieとどのように異なりますか?PHPセッションはCookieとどのように異なりますか?May 02, 2025 am 12:03 AM

phpsesionsareserver-side、whilecookiesareclient-side.1)Sessionsionsionsoredataontheserver、aremoresecure.2)cookiesstoredataontheclient、cookiestoresecure、andlimitedinsizeisize.sesionsionsionivationivationivationivationivationivationivationivate

PHPはユーザーのセッションをどのように識別しますか?PHPはユーザーのセッションをどのように識別しますか?May 01, 2025 am 12:23 AM

phpidentifiesauser'ssessionsingsinssessionCookiesIds.1)whensession_start()iscalled、phpgeneratesauniquesidstoredsored incoookienadphpsessidontheuser'sbrowser.2)thisidallowsphptortorieSessiondatadata fromthata

PHPセッションを保護するためのベストプラクティスは何ですか?PHPセッションを保護するためのベストプラクティスは何ですか?May 01, 2025 am 12:22 AM

PHPセッションのセキュリティは、次の測定を通じて達成できます。1。session_regenerate_id()を使用して、ユーザーがログインまたは重要な操作である場合にセッションIDを再生します。 2. HTTPSプロトコルを介して送信セッションIDを暗号化します。 3。Session_Save_Path()を使用して、セッションデータを保存し、権限を正しく設定するためのSecure Directoryを指定します。

PHPセッションファイルはデフォルトで保存されていますか?PHPセッションファイルはデフォルトで保存されていますか?May 01, 2025 am 12:15 AM

phpsessionFilesToredInthededirectoryspecifiedBysession.save_path、通常/tmponunix-likesystemsorc:\ windows \ temponwindows.tocustomizethis:1)uesession_save_path()tosetaCustomdirectory、ensuringit'swritadistradistradistradistradistra

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール