使用类的静态方法 根据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 值 加载页面
登录后首页效果截图 根据get 值 加载页面
明星页面效果截图 根据get 值 加载页面
退出及其它get值效果截图 根据get 值 加载页面