一)日志类
my_frame/core/lib/log.php 核心文件之日志文件
<?php
namespace core\lib;
class log{
static $class;#用于存储类
/**
* 加载存储方式
* 1.确定日志的存储方式
* 2.写日志
*/
static public function init(){
//确定存储方式
$drive = conf::get('DRIVE','log');#驱动
$class = '\core\lib\drive\log\\'.$drive;#类的名称
self::$class = new $class;
}
static public function log($name,$file='log'){
self::$class->log($name,$file);
}
}
my_frame/core/lib/drive/log/file.php 日志文件之文件日志
存储文件日志
<?php
namespace core\lib\drive\log;
use core\lib\conf;
class file{
public $path;#日志存储位置
public function __construct()
{
$conf = conf::get('OPTION','log');
$this->path = $conf['PATH'];
}
public function log($message){
/**
* 1.确定文件存储位置是否存在
* 新建目录
* 2.写入日志
*/
if (!is_dir($this->path.date('Ym'))){
mkdir($this->path.date('Ym'),'0777',true);
}
$file = file_put_contents($this->path.date('Ym').'/'.date('d').'.log',
date('Y-m-d H:i:s').json_encode($message).PHP_EOL,FILE_APPEND);
return $file;
}
}
my_frame/core/config/log.php 日志配置文件
<?php
return array(
'DRIVE' => 'file',
'OPTION' => array(
'PATH'=>LSS.'/log/'
),
);
二)composer加载
2.1.安装composer
(参考https://pkg.phpcomposer.com/#how-to-install-composer)
1)先确认php –v是否能正常输出版本号
2)打开命令行并依次执行下列命令安装最新版本的 Composer
命令1(下载安装脚本):php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
命令2(执行安装过程):php composer-setup.php
命令3(删除安装脚本):php -r "unlink('composer-setup.php');"
最后重新打开一个命令行窗口试一试执行 composer --version 看看是否正确输出版本号。
提示:不要忘了经常执行 composer selfupdate
以保持 Composer 一直是最新版本哦!
2.2写composer.json文件
my_frame/composer.json(注意,注释部分在运行时要去掉,否则报错)
{
"name":"LSS PHP",//框架名称
"description":"PHP Framework",//简单描述
"type":"Framework",
"keywords":[
"PHP","PHP Framework"
],
//重要部分,框架需要引入的插件
"require":{
"php":" >= 5.3.0",//php版本要求
"filp/whoops":"*",//错误展示类
"symfony/var-dumper":"*",//dump输出
"catfan/medoo":"*",//medoo数据库
"twig/twig":"*"//twig模板引擎
},
//中文网站
"repositories": {
"packagist": {
"type": "composer",
"url": "https://packagist.phpcomposer.com"
}
}
}
2.3错误展示类的使用whoops
my_frame/index.php入口文件,如红色字体代码所示
<?php
/**
* 入口文件
* 1.定义全局常量(define)
* 2.加载函数库
* 3.启动框架
*/
define('LSS',dirname(__FILE__));#当前框架所在的根目录
define('CORE',LSS.'/core');#框架核心文件所在目录
define('APP',LSS.'/app');#项目文件所处目录
define('MODULE','app');#项目文件所处目录
define('DEBUG',true);#是否开始调试模式
require 'vendor/autoload.php';#引入vendor/autoload.php文件
if (DEBUG){
//错误类的展现形式
$whoops =new \Whoops\Run();
$whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler());
$whoops->register();
ini_set('display_error','On');#为一个配置选项设置值
}else{
ini_set('display_error','Off');
}
include CORE.'/common/function.php';#加载函数库
include CORE.'/lss.php';#核心文件
spl_autoload_register('\core\lss::load');#类不存在的时候将会触发该方法,即类的自动加载
\core\lss::run();
三)medoo数据库类
3.1 my_frame/core/lib/model.php 核心文件之模型文件
<?php
namespace core\lib;
class model extends \Medoo\Medoo#引入medoo
{
public function __construct()
{
$option = conf::all('database');
parent::__construct($option);
}
}
3.2 my_frame/core/config/database.php 数据库配置文件
<?php
return array(
'database_type' => 'mysql',
'database_name' => 'tieba',
'server' => 'localhost',
'username' => 'root',
'password' => 'root',
'charset' => 'utf8'
);
3.3数据库的增删改查
my_frame/app/controller/index.php 控制器文件
<?php
namespace app\controller;
use app\model\indexmodel;
use core\lib\model;
class index extends \core\lss {
public function index(){
//参考https://medoo.lvtao.net/1.2/doc.insert.php官方文档
#select($table, $join, $columns, $where)
$model = new indexmodel();
$res = $model->sel();
dump($res);
}
}
my_frame/app/model/indexmodel.php 模型文件
<?php
namespace app\model;
use core\lib\model;
class indexmodel extends model{
public function sel(){
$list = $this->select('user','*');
return $list;
}
}
四)twig模板引擎
my_frame/core/lss.php 核心文件
/**
* 显示视图
* @param $file
*/
public function display($file){
/*$file = APP.'/views/'.$file;
if (is_file($file)){
extract($this->assign);#从数组中将变量导入到当前的符号表
include $file;
}*/
$file = APP.'/views/'.$file;
if (is_file($file)){
#参考https://www.kancloud.cn/yunye/twig-cn/159459
\Twig_Autoloader::register();
$loader = new \Twig_Loader_Filesystem(APP.'/views');
$twig = new \Twig_Environment($loader, array(
'cache' => LSS.'/log/twig',
'debug' =>DEBUG
));
$template = $twig->loadTemplate('index.html');
$template->display($this->assign ? $this->assign:null);
}
}
my_frame/app/controller/index.php 控制器文件
<?php
namespace app\controller;
class index extends \core\lss {
public function index(){
$data = '视图文d件';
$title = '';
$this->assign('title',$title);
$this->assign('data',$data);
$this->display('index.html');
}
}
my_frame/app/views/index.html 视图文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{data}}</title>
</head>
<body>
{{ data }}
</body>
</html>
整个框架实战https://blog.csdn.net/angryshan/article/details/86288938