Blogger Information
Blog 28
fans 0
comment 0
visits 19695
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
1015 使用类的静态方法 自动加载 视图页面的小案例,20191015 2000-2200
没有人的夏天的博客
Original
840 people have browsed it

使用类的静态方法 根据get 值  自动加载页面遇到的几个问题:

1.首先要注意引用不同路径下文件的方法

在mvc框架中,不同功能的文件放在不同的路径下,就会触发文件交叉引用的情况。

也就是说,在c路径下的文件引用了m路径下的文件,而m路径下的文件又动态引用了v路径下文件。

需要在include时加入当前文件路径信息,可以把有效的文件加载进来。否则会提示无法找到文件。

解决方案:

include dirname(__FILE__) . '/***.php';

2. 使用类进行自动加载页面,会引发变量及方法的作用域问题

也就是说在c路径下文件,调用v路径下的方法 ,而使用m路径下文件中的变量 

虽然都引用到了当前文件中,但不同类中的变量及方法还存在工作域的问题。

解决方案:

在发起调用的方法中引入inculde 包含参数及其它方法的文件,而不是在类外引入。

案例: 根据php原生mvc框架 设计 类静态方法自动加载页面案例

入口文件: index.php  更改如下

  • <!-- 加载公开信息  -->
    <?php include 'controller/title.php' ?> 
    <!--加载公共头部-->
    <?php include 'view/inc/header_inc.php'; ?>
    <!-- 加载页面模板 -->
    <?php include 'controller/config.php'; ?>
    <!--加载公共底部-->
    <?php include 'view/inc/footer_inc.php' ?>

加载页面文件:config.php 更改如下

  • <?php
    //开启session
    session_start();
    // 判断是否登录 //未登录的情况下给一个login页面
    if (!isset($_SESSION['user'])) {
        loadget::login();
    } else {
        // 判断get是否为空 空值进入 index页面
        $getname = isset($_GET['a']) ? $_GET['a'] : 'index';
        // 判断已登录情况下get是否为login,是login则进入index页面
        $getname = $getname == 'login' ? 'index' : $getname;
        // 静态调用页面
        loadget::$getname();
    }
    // 页面加载类
    class loadget
    {
        static function login()
        {
            //包含参数信息及方法库的文件在loginAction.php文件内引入,而且不是在类的外部引入
            include dirname(__FILE__) . '/loginAction.php';
        }
        static function index()
        {
            include dirname(__FILE__) . '/indexAction.php';
        }
        static function user()
        {
            include dirname(__FILE__) . '/userAction.php';
        }
        static function video()
        {
            include dirname(__FILE__) . '/videoAction.php';
        }
        // logout或get非特定值会退出
        static function __callStatic($a, $b)
        {
            //关闭session 进入loging页面
            session_destroy();
            include dirname(__FILE__) . '/loginAction.php';
        }
    }

login文件 :loginAction.php 更改部分  其它未做更改

  • <?php
    //0.加载参数文件
    include dirname(__FILE__) . '/conf.php';
    //1.加载函数库文件
    include dirname(__FILE__) . '/function_pdo.php';

       其它未做更改,最后一行加入以下代码

  • //设置传入参数值
    $list = '';
    $page = '';
    //4. 加载模版,加入变量做为参数带入到function_pdo.php的auto_load_tpl方法中
    auto_load_tpl($tplName, $list, $page);

方法库文件:function_pdo.php 更改部分 其它未做更改

  • <?php
    function auto_load_tpl($tplName, $list, $page)
    {    
        //加载模板,$list, $page 会带入到 $tplName.php 中 
        //dirname(dirname(__FILE__)) 会返回到上级目录中
        include dirname(dirname(__FILE__)) . '/view/tpl/' . $tplName . '.php';
    }

登录页面 login.tpl.php  未做更改

登录后的首页调用文件 的更改部分 indexAction.php  其它未做更改

  • <?php
    //0.加载参数文件
    include dirname(__FILE__) . '/conf.php';
    //1.加载函数库文件
    include dirname(__FILE__) . '/function_pdo.php';

        其它未做更改,最后一行加入以下代码

  • //4. 加载模版,加入变量做为参数带入到function_pdo.php的auto_load_tpl方法中
    auto_load_tpl($tplName, $list, $page);

登录后首页文件 index_tpl.php  未做更改


登录页面效果截图  根据get 值 加载页面

  • TIM截图20191027135631.pngTIM截图20191027135631.png

登录后首页效果截图 根据get 值 加载页面

  • TIM截图20191027135707.png


明星页面效果截图 根据get 值 加载页面

  • TIM截图20191027135739.png


退出及其它get值效果截图 根据get 值 加载页面

  • TIM截图20191027135808.png


  • TIM截图20191027140432.png

Correction status:qualified

Teacher's comments:很好
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post