TinyPHP 是一个基础的 PHP MVC 框架模板,仅对「路由」「数据库」「异常」「错误」进行简单的封装,通过此项目你可以更快理解一个 MVC 框架的实现。
- PHP >= 7.0
- MySQL >= 5.0
首次打开 TinyPHP 会载入一个简陋的「安装程序」,按照要求填写相关配置信息即可完成安装。「安装程序」会创建一系列供演示用的数据库表、数据
默认是开启的,如果程序捕获到「异常」「错误」会直接输出到页面上,如果程序用于生产环境请手动关闭。到 config.inc.php
文件里找到 APP_DEBUG
选项,设置为 false
。( 注意:关闭状态下所有异常、错误会记录到错误日志,你可以到 logs\error.log
找到历史错误 )
默认是关闭的,如果需要 URL伪静态 需要手动开启,首先到 config.inc.php
文件里找到 URL_REWRITE
选项,设置为 true
。接下来根据你的服务器环境配置 rewrite
规则。
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php$1 last;
}
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
</IfModule>
「伪静态」的开启/关闭会决定「路由」对URL解析的方式
https://www.xxxxx.com/post/get/1/2/3
- 控制器: post
- 动作名: get
- 参数值: 1, 2, 3
https://www.xxxxx.com?c=post&a=get&p=1,2,3
- 控制器: post
- 动作名: get
- 参数值: 1, 2, 3
主要用于按指令选择合适的模型,指定视图文件
core\Controllers\
xxxxxController.php
其中xxxxx是控制器命名,例如 adminController.php
那么当访问 https://www.xxxxx.com/admin/
就会加载此控制器( 注意: 如果不指定方法名则默认执行控制器下的 init
方法 )
用于向 View基类 传递一个变量值,例如 $this->assign('test', '123')
,在视图文件中可以通过 $this->variables['test']
得到 123
用于向 View基类 指定一个视图文件进行加载, 例如 $this->render('index.php')
,就会加载 pages\index.php
文件到视图中
主要用于按指令操作数据库取出数据返回给控制器
core\Models\
xxxxxModel.php
其中xxxxx是模型命名,例如 optionsModel.php
,其中options对应的是数据库表名
用于操作数据库
// 增
$this->execute("INSERT INTO " . DB_PREFIX . "users (username, password) VALUES (?, ?)", array($username, $password));
// 删
$this->execute("DELETE FROM " . DB_PREFIX . "users WHERE uid = ?", array($uid));
// 查
$this->execute("SELECT * FROM " . DB_PREFIX . "options")
// 改
$this->execute("UPDATE " . DB_PREFIX . "options SET value = ? WHERE name = ?", array($value, $name));
从结果集中返回一条以列名为索引的关联数组
从结果集中返回所有以列名为索引的关联数组
返回受上一个SQL语句影响的行数
返回最后插入行的ID或序列值
Model基类文件中进行了简易的连贯操作封装方法,你可以直接在模型文件中使用, 就像这样 :
// 增
$this->insert(['name' => 'test', 'value' => '123'])->rowCount()
// 删
$this->where('name = ?')->param('test')->delete()->rowCount()
// 查
$this->where('name = ?')->param('test')->select()->fetch()
// 改
$this->where('name = ?')->param('test')->update(['name' => 'newTest', 'value' => 'new123'])->rowCount()
所有操作都是基于 execute
实现的,这意味着更安全可靠,示例详见 core\Models\optionsModel.php
主要用于渲染最终结果并呈献给用户
pages\