之前我们已经搭建了一个简陋的mvc框架,下面我们来提高一下框架的健壮性,
首先,看一下我们之前写的路由类;一些默认的配置都是些在文件中的,我们可以封装一个配置类来替换这些值,这样我们修改配置的时候就不用单独在文件中修改了;
$this->action = <span style="color:#FF0000;"></span><span style="color:#FF0000;">'index.html'</span>
①新建一个配置目录config;用来储存我们的配置文件;
②在config目录下新建route.php文件,用来储存路由默认配置
<?php
return array(
'CTRL'=>'index',<span style="color:#FF0000;">//控制器默认为index</span>
'ACTION'=>'index'<span style="color:#FF0000;">//默认动作也是index</span>
);
③在lib目录下新建配置处理配置文件conf.php
<?php
namespace core\lib;
class conf
{
static public $conf=array();<span style="color:#FF0000;">//新建一个静态数组,用于储存配置</span>
//static public $cona=array();
static public function get($name,$file)<span style="color:#FF0000;">//这里有两个参数;</span><span style="color:#FF0000;">name是配置的名称,file是配置的值;</span>
{<span id="transmark" style="display: none; width: 0px; height: 0px;"></span>
<span style="color:#FF0000;"> /* 完成思路
* 1,判断配置文件是否存在
* 2判断配置是否存在
* 3缓存配置
*/</span>
//p(self::$conf[$file]);
if(isset(self::$conf[$file])){<span style="color:#FF0000;">//为了不重复储存,我们先要判断一下是否存在这个配置的缓存</span>
//p(self::$conf[$file]);exit;
return self::$conf[$file];
}else{
//p(1);
$path = IMOOC.'\core\config\\'.$file.'.php';<span style="color:#FF0000;">//第一步:</span>首先获取配置文件路径,
//p($file);exit();
if(is_file($path)){<span style="color:#FF0000;">//第二步:</span>判断配置文件是否存在
$conf=include $path;<span style="color:#FF0000;">//第三步:</span>引用配置文件,将文件放入缓存中后返回配置;
//p($file);p($name);p($conf[$name]);exit();
if(isset($conf[$name])){
self::$conf[$file]=$conf;
return $conf[$name];
}else{
throw new \Exception('没有这个配置项'.$name);<span style="color:#FF0000;">//如果没有这个配置项就抛出一个异常;</span>
}
}else{
throw new \Exception('找不到配置文件',$file);<pre name="code" class="php"><span style="color:#FF0000;">//如果没有这个配置文件就抛出问题;</span>
} } }}?>
④验证方法是否可用;
<?php
namespace app\ctrl;
use app\model\cModel;
use app\model\kModel;
use core\lib\model;
class indexCtrl extends \core\imooc
{
//所有留言
public function index()
{
$temp = \core\lib\conf::get('CTRL','route');<span style="color:#FF0000;">//调用get方法输出index;就算完成了;</span>
print_r($temp);
}
}
这样我们这个配置类就算完成了;哪里需要这个配置直接用get方法提取配置;
因为这个是提取单个配置的;如果遇到数据库配置我们就需要提取有关数据库的所有配置;
步骤和配置单个一样,
①在config目录新建database.php作为数据库配置文件,内容如下;
<?php
return array(
'database_type' => 'mysql',
'database_name' => 'kaoshi',
'server' => 'localhost',
'username' => 'root',
'password' => 'root',
'charset' => 'utf8'
);
?>
②在lib目录下的conf.php文件中搭建方法
static public function all($file)
{
/*
* 1,判断配置文件是否存在
* 2判断配置是否存在
* 3缓存配置
*/
if(isset(self::$conf[$file])){
return self::$conf[$file];
}else{
//p(1);
$path = IMOOC.'\core\config\\'.$file.'.php';
//p($path);exit();
if(is_file($path)){
$conf=include $path;
//p($conf);exit();
if(isset($conf)){
self::$conf[$file]=$conf;
return $conf;<span style="color:#FF0000;">//直接在这里返回整个文件;这样就可以获得整个配置文件了</span>
}
}else{
throw new \Exception('找不到配置文件',$file);
}
}
}
这样我们的配置类就算完成了:需要调用单个配置用get()方法,get方法有两个参数:第一个为配置名第二个为文件名;调用全部配置用all();all方法只有一个参数,为文件名.
日志类
每个框架运行的时候都需要一个日志类记录文件的活动;日志类和其他类不同的地方就是储存方式需要用数据库或者用本地文件记录还有可能存在与缓存文件中;
所以我们需要先判断一下文件的储存类型;
①在config目录中新建日志文件配置log.php
<?php
//日志类
return array(
'DRIVE'=>'file',<span style="color:#FF0000;">//日志储存方式</span>
'OPTION'=>array(<span style="color:#FF0000;">//日志储存位置</span>
'PATH'=>IMOOC.'/log/',
),
);
?>
②在lib目录下新建日志文件log.php;
<?php
namespace core\lib;
use core\lib\conf;
class log
{
static $class;
<span style="color:#FF0000;">/*
* 1确定日志存储方式
*
* 2 写日志
*/</span>
static public function init()<span style="color:#FF0000;">//第一步:加载类判断文件储存方式</span>
{
$drive= conf::get('DRIVE','log');
$class='\core\lib\drive\log\\'.$drive;<span style="color:#FF0000;">//根据储存方式进入类</span>
//p($class);
self::$class = new $class;
}
static public function log($name,$file='log')
{
self::$class->log($name,$file);
}
}
?>
③配置file文件
<?php
namespace core\lib\drive\log;
//文件系统
use core\lib\conf;
class file
{
public $path;#日志存储位置
public function __construct()
{
$this->path = conf::get('OPTION','log');
}
public function log($message,$file='log')<span style="color:#FF0000;">//有两个参数第一个为日志内容;第二个为储存文件名</span>
{
<span style="color:#FF0000;"> </span><pre name="code" class="html"><span style="color:#FF0000;">/*
* 1确定文件存储位置是否存在
* 新建目录
* 2写入日志
*/</span>
//p(is_dir(IMOOC.'/file'));exit; $logpath=IMOOC.'\\'.$this->path; //p($logpath);exit; if(!is_dir($logpath)){ //确定文件存储位置是否存在
mkdir($this->path,'0777',true); //新建文件 } //p($message);exit; return file_put_contents($logpath.'\\'.$file.'.php',date('Y-m-d H:i:s').json_encode($message).PHP_EOL,FILE_APPEND); //利用
file_put_contents储存文件,内容转换为json_encode便于储存. }}?> ④生成文件.
这样我们的日志类就配置成功了;