使用类的静态方法 根据get 值 自动加载页面遇到的几个问题:1.首先要注意引用不同路径下文件的方法
在mvc框架中,不同功能的文件放在不同的路径下,就会触发文件交叉引用的情况。
也就是说,在c路径下的文件引用了m路径下的文件,而m路径下的文件又动态引用了v路径下文件。
需要在include时加入当前文件路径信息,可以把有效的文件加载进来。否则会提示无法找到文件。
解决方案:
include dirname(__FILE__) . '/***.php';2. 使用类进行自动加载页面,会引发变量及方法的作用域问题
也就是说在c路径下文件,调用v路径下的方法 ,而使用m路径下文件中的变量
虽然都引用到了当前文件中,但不同类中的变量及方法还存在工作域的问题。
解决方案:
在发起调用的方法中引入inculde 包含参数及其它方法的文件,而不是在类外引入。案例: 根据php原生mvc框架 设计 类静态方法自动加载页面案例
入口文件: index.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 值 加载页面