基于PSR-0编码规范开发一套PHP-MVC框架(二)

贾琏
• 阅读 2275

一、composer依赖包管理工具。composer.json

{
    "name":"PHP-FRAME",
    "author":"Guoming.Zhang",
    "type":"FRAME",
    "version":"v1.0.0",
    "date":"2018-4-16 16:18:00",
    "keywords":["php","frame","PHP框架","MVC"],
    "description":"采用PSR-0编码规范开发的一套PHP框架,纯面向对象开发,composer依赖包管理、twig模版引擎、Medoo数据库类、Whoops错误输出等......",
    "require":{
        "twig/twig":"*",
        "catfan/medoo":"*",
        "filp/whoops":"*"
    }
}

在项目根目录下使用命令执行 composer install 安装twig、medoo、whoops插件

二、入口文件。index.php 引入vendor/autoload.php文件,开启whoops错误提示插件

<?php
header('Content-type:text/html;charset=utf-8');
date_default_timezone_set('PRC');
require_once(__DIR__.'/configs/Website.php');
require_once(__DIR__.'/frame/Common/Function.php');
require_once(__DIR__.'/frame/App.php');
require_once(__DIR__.'/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');
}
spl_autoload_register('frame\App::autoload');
frame\App::run();
?>

三、数据库配置文件。configs/Database.php

<?php
return array(
    'database_type' => 'mysql',
    'database_name' => 'redis',
    'server' => 'localhost',
    'username' => 'root',
    'password' => 'root',
    'charset' => 'utf8',
    'port' => 3306,
    'prefix' => 'redis_',
);

四、数据库操作类。frame/Libs/Model.php

<?php
namespace frame\Libs;
use frame\Libs\Config;
use Medoo\medoo;

class Model extends medoo
{
    public function __construct()
    {
        $databaseConfigs = Config::get('Database',NULL,TRUE);
        parent::__construct($database);
    }
}

五、模型层操作数据库。app/Models/Users.php

<?php
namespace app\Models;
use frame\Libs\Model;
class Users extends Model
{
    public $table = 'users';
    
    //获取用户列表
    public function lists()
    {
        return $this->select($this->table,'*');
    }
    //增加用户
    public function addOne(array $data)
    {
        return $this->insert($this->table,$data);
    }
    //删除用户
    public function delOne(array $where)
    {
        return $this->delete($this->table,$where);
    }
    //修改用户
    public function editOne(array $data, array $where)
    {
        return $this->update($this->table,$data,$where);
    }
}

六、视图层基类。app/Controllers/Controller.php

<?php
namespace app\Controllers;
class Controller
{
    public function view(string $file,array $data = [] )
    {
        $views = APP.'/Views/'.$file.'.html';
        if(is_file($views)) {
            $twigConfig = CACHE ? array( 'cache' => BASEPATH.'/storage/cache/' ) : [];
            $loader = new \Twig_Loader_Filesystem(APP.'/Views/');
            $twig = new \Twig_Environment($loader, $twigConfig);
            $template = $twig->loadTemplate($file.'.html');
            $template->display($data);
        } else {
            throw new \Exception($file."视图模版不存在", 1);
        }
    }
}

七、控制器操作数据并显示到页面。app/Controllers/Home/IndexController.php

<?php
namespace app\Controllers\Home;
use app\Controllers\Controller;
use app\Models\Users;

class IndexController extends Controller
{
    public function __construct()
    {
        $this->model = new Users;
    }
    public function index()
    {
        //获取所有用户
        $users = $this->model->lists();
        //删除用户
        // $del = $this->model->delOne(['id'=>1]);
        //修改用户
        // $update = $this->model->editOne(['user'=>'张三'],['id'=>2]);
        
        //视图模版渲染
        $this->view('Home/index',['users'=>$users]);
    }
}

八、视图文件。app/Views/Home/index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>twig模版引擎</title>
</head>
<body>
    {% for item in users %}
        用户名:{{item.user}} <br>
        密码: {{item.pass}} <br>
    {% endfor %}
</body>
</html>

medoo数据库操作类官方文档:https://medoo.lvtao.net/doc.php
twig模版引擎官方文档:https://www.kancloud.cn/yunye...
github地址:https://github.com/305515319/...

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
VBox 启动虚拟机失败
在Vbox(5.0.8版本)启动Ubuntu的虚拟机时,遇到错误信息:NtCreateFile(\\Device\\VBoxDrvStub)failed:0xc000000034STATUS\_OBJECT\_NAME\_NOT\_FOUND(0retries) (rc101)Makesurethekern
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Stella981 Stella981
3年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这