框架內容填充-composer加載

一)日誌類

 

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章