Weeio-lite 简单、高效,一个超轻量级的PHP-MVC框架! 使用Weeio-lite PHP版本必须是5.4+或更高版本。
Weeio-lite
├─app # 应用目录
│ ├─Api # 模块1
│ │ ├─Controller # 控制器目录
│ │ │ Index.php # 控制器类文件
│ │ └─Model # 模型目录
│ │ User.php # 模型类文件
│ └─Home # 模块2
│ ├─Controller # 控制器目录
│ │ Index.php # 控制器类文件
│ ├─Model # 模型类目录
│ └─View # 视图目录
│ └─Index # 控制器Index视图目录
│ index.html # 视图文件(后缀是.html 或 .php)
│ test.html
│ test2.html
├─extend # 框架扩展类目录
│ weeio-lite.sql # Weeio-lite示例数据, 可删除
├─public # 网站根目录
│ .htaccess # Apache脚本文件, 默认配置URL路由美化
│ index.php # 网站入口文件
└─weeio # weeio-lite 框架核心目录
│ weeio.php # 框架核心引导文件
├─config # 框架配置文件目录
│ database.php # 数据库配置文件
│ route.php # 路由配置
├─func # 全局函数库
│ Common.php # 公用函数库文件
└─lib # weeio-lite 核心类库
Conf.php # 配置读取载入类
DI.php # PHP-IOC(DI-依赖注入)类
Medoo.php # 数据库操作引擎类
Model.php # 模型控制类
Route.php # 路由解析类
模块目录(Module)、控制器目录(Controller)、模型目录(Model)、视图目录(View)、视图下的控制器目录(View/..)、控制器类文件、模型类文件 命名首字母必须是大写的, 如下结构
├─app # 应用目录
│ ├─Api # 模块1
│ │ ├─Controller # 控制器目录
│ │ │ Index.php # 控制器类文件
│ │ └─Model # 模型目录
│ │ User.php # 模型类文件
│ └─Home # 模块2
│ ├─Controller # 控制器目录
│ │ Index.php # 控制器类文件
│ ├─Model # 模型类目录
│ └─View # 视图目录
│ └─Index # 控制器Index视图目录
│ index.html # 视图文件(后缀是.html 或 .php)
│ test.html
│ test2.html
weeio-lite路由解析模式仅有两种: PATHINFO模式、普通模式
默认启用: PATHINFO模式
路由配置文件所在路径: /weeio/config/route.php
<?php
return array(
'PATHINFO' => true, # 默认启用 PATHINFO模式, 如果只想用普通?号传参模式 改 false
'MODULE' => 'Home', # 默认访问模块
'CONTROLLER' => 'Index', # 默认控制器
'ACTION' => 'index', # 默认方法
'OPEN_MODULE' => [ # 开放模块 (注意: 新增的模块必须把模块名添加到该数组中)
'Home' => true, # '模块名' => true
'Api' => true,
// ...
]
);
(1) 如何通过URL访问模块下的控制器方法?
# 示例: 访问Home模块下Index控制器index方法
http://127.0.0.1/home/index/index
| | └───── 方法名Action (首字母必须是小写)
| └───── 控制器名Controller (首字母可大小写)
└───── 模块名Module (首字母可大小写)
等同于↓
http://127.0.0.1/Home/Index/index
| | └───── 方法名Action (首字母必须是小写)
| └───── 控制器名Controller (首字母可大小写)
└───── 模块名Module (首字母可大小写)
等同于↓
http://127.0.0.1/index/index
| └───── 方法名Action (首字母必须是小写), 没有指定"模块名Module"会自动调用配置文件中定义的默认模块
└───── 控制器名Controller (首字母可大小写)
等同于↓
http://127.0.0.1/Index/index
| └───── 方法名Action (首字母必须是小写), 没有指定"模块名Module"会自动调用配置文件中定义的默认模块
└───── 控制器名Controller (首字母可大小写)
等同于↓
http://127.0.0.1/home/index
| └───── 控制器名Controller (首字母可大小写), 没有指定"方法名Action"会自动调用路由配置文件中定义的默认方法
└───── 模块名Module (首字母可大小写)
等同于↓
http://127.0.0.1/Home/Index
| └───── 控制器名Controller (首字母可大小写), 没有指定"方法名Action"会自动调用路由配置文件中定义的默认方法
└───── 模块名Module (首字母可大小写)
等同于↓
http://127.0.0.1/index
└───── 控制器名Controller (首字母可大小写), 没有指定"模块名Module、方法名Action名"会自动调用路由配置文件中定义默认的
等同于↓
http://127.0.0.1/Index
└───── 控制器名Controller (首字母可大小写), 没有指定"模块名Module、方法名Action名"会自动调用路由配置文件中定义默认的
等同于↓
http://127.0.0.1/Home
└───── 模块名Module (首字母可大小写), 没有指定"控制器名Controller"会自动调用路由配置文件中定义的默认控制器, 没指定方法同理
等同于↓
http://127.0.0.1/home
└───── 模块名Module (首字母可大小写), 没有指定"控制器名Controller"会自动调用路由配置文件中定义的默认控制器, 没指定方法同理
等同于↓
http://127.0.0.1/
└───── 模块名Module、控制器名Controller、方法名Action 都不填也可以, 都会自动调用配置定义默认的
(2) 如何通过URL传递参数?
# 示例: 传递参数 id=28, name=dejan 给 Home模块下Index控制器的index方法
http://127.0.0.1/home/index/index/id/28/name/dejan
| | └───── 方法名Action (首字母必须是小写)
| └───── 控制器名Controller (首字母可大小写)
└───── 模块名Module (首字母可大小写)
等同于↓
http://127.0.0.1/index/index/id/28/name/dejan
| └───── 方法名Action (首字母必须是小写)
└───── 控制器名Controller (首字母可大小写)
(3) 如何在PATHINFO模式下强制使用普通"?"号传参模式?
# 示例: 以下链接是一个API接口, 出于安全和性能考虑并不需要在PATHINFO模式下解析, 通常都会以POST方式提交参数数据那么必须强制关闭PATHINFO方式解析, 这样效率会更高、速度更快!
http://127.0.0.1/?pathinfo=off&m=api&c=index&a=index
等同于↓
http://127.0.0.1/?m=api&c=index&a=index&pathinfo=off
(1) 如何通过URL访问模块下的控制器方法?
# 示例: 访问Home模块下Index控制器index方法
http://127.0.0.1/?m=api&c=index&a=index
| | └───── 方法名Action (首字母必须是小写)
| └───── 控制器名Controller (首字母可大小写)
└───── 模块名Module (首字母可大小写)
等同于↓
http://127.0.0.1/
└───── 没有指定 "方法名Action"、"控制器名Controller"、"模块名Module" 路由解析器会自动选取配置文件中定义默认的
(2) 如何通过URL传递参数?
# 示例: 传递参数 id=28, name=dejan 给 Home模块下Index控制器的index方法
http://127.0.0.1/?m=api&c=index&a=index&id=28&name=dejan
| | └───── 方法名Action (首字母必须是小写)
| └───── 控制器名Controller (首字母可大小写)
└───── 模块名Module (首字母可大小写)
等同于↓
http://127.0.0.1/?id=28&name=dejan
└───── 没有指定 "方法名Action"、"控制器名Controller"、"模块名Module" 路由解析器会自动选取配置文件中定义默认的
(1) 示例: 创建3个模块分别是: Api、Admin、Home (注意:模块名首字母必须是大写的)
├─app # 应用目录
│ ├─Api # 新建模块1
│ ├─Admin # 新建模块2
│ └─Home # 新建模块3
│
└─weeio # weeio-lite 框架核心目录
(2) 修改 "路由配置文件" => /weeio/config/route.php 分别把新创建的模块名称加入到开放模块配置项中
# Weeio 路由配置
return array(
...
'OPEN_MODULE' => [ # 开放模块 (注意: 新增的模块必须把模块名添加到该数组中)
'Api' => true, # '模块名' => true
'Admin' => true,
'Home' => true,
]
);
场景: 公司要做一个视频网站, 产品策划同事很快就设计好原型给到我们手上原型里有 网站前台、网站后台、移动端APP接口 .. 这时候想到的肯定是必须实现前后台网站分离、移动端API接口分离, 那该怎么做呢?
这时候我们就可以把 网站前台、网站后台、APP接口 看成独立的应用,即"模块Module"。然后划分成不同的"模块Module"来开发。
示例: 在 Home 模块目录下创建3个控制器 (注意: 控制器文件命名首字母必须是大小的)
├─app # 应用目录
│ └─Home # 模块目录
│ ├─Controller # 控制器目录
│ │ Index.php # 控制器1: 首页
│ │ Column.php # 控制器2: 栏目
│ │ Article.php # 控制器3: 文章
-- 控制器1:Index.php 文件内容
class Index
{
public function index(){...}
}
-- 控制器2:Column.php 文件内容
class Column
{
public function column(){...}
}
-- 控制器3:Article.php 文件内容
class Article
{
public function article(){...}
}
# 方式1 :
/**
* @param $id 框架底层自动会提取返回相应的 $_POST['id'] 或 $_GET['id'] 值
* @param $name 框架底层自动会提取返回相应的 $_POST['name'] 或 $_GET['name'] 值
*/
public function test($id, $name = '未知') # 该方式会自动选取$_POST或$_GET对应参数值, 如果$_POST或$_GET不一定提交某参数你还可以给他初始化
{
echo "ID:{$id}, name:{$name}";
}
或 等同于↑
public function test($name = '未知', $id) # 该方式自动选取$_POST或$_GET对应参数值是不分先后顺序的, 很高大上!
{
echo "ID:{$id}, name:{$name}";
}
# 方式2 :
public function test()
{
if(isset($_GET['id']) && isset($_GET['name']))
{
echo "ID:{$_GET['id']}, name:{$_GET['name']}";
}
else
{
echo "ID:{$_POST['id']}, name:{$_POST['name']}";
}
}
调用 $this->display() 方法渲染视图 (注意: 调用到 $this->display()、$this->assign($data) 方法, 该控制器必须继承weeio核心类)
<?php
namespace app\Home\Controller;
class Index extends \weeio\weeio # 调用到 $this->display()、$this->assign($data) 方法, 该控制器必须继承weeio核心类
{
public function test($id, $name)
{
$this->display(); # 视图渲染weeio默认会找到控制器方法相应view文件(注意:视图文件必须放在View下对应控制器目录下)
//$this->display('test2.html'); # 当然也可以指定视图文件 , 但必须放在模块下View对应的控制器目录下
}
}
调用 $this->assign() 将变量映射到视图中使用
<?php
namespace app\Home\Controller;
class Index extends \weeio\weeio # 调用到 $this->display()、$this->assign($data) 方法, 该控制器必须继承weeio核心类
{
public function test($id, $name)
{
$this->assign('name',$name); # 单个变量映射
$this->assign('id',$id);
$data = [
'id' => $id,
'name' => $name
];
$this->assign($data); # 多个变量映射, 数组
$this->display(); # 视图渲染weeio默认会找到控制器方法相应view文件(注意:视图文件必须放在View下对应控制器目录下)
//$this->display('test2.html'); # 当然也可以指定视图文件 , 但必须放在模块下View对应的控制器目录下
}
}
如果控制器方法调用到 $this->display()、$this->assign($data) 方法、$_Di实例对象, 控制器类必须继承weeio核心类。
示例: 在Api模块下创建一个用户模型
├─app # 应用目录
│ ├─Api # 模块目录
│ │ └─Model # 模型目录
│ │ User.php # 模型类文件
-- 模型类:User.php 文件内容
<?php
namespace app\Api\Model;
class User extends \weeio\lib\Model
{
/**
* 获取所有用户
*/
public function get_all()
{
//var_dump(self::$_db); # 打印数据库操作实例对象
return self::$_db->select(
'user', # 数据库表名
'*' # 查询字段
);
}
}
weeio-lite框架模型类集成了 Medoo数据库操作引擎, 关于 "数据库增删改查操作" 详细使用请查阅文档: https://medoo.in/doc
# 示例: 获取数据库中 User表的所有用户信息记录
-- 模型类 User.php
<?php
namespace app\Api\Model;
class User extends \weeio\lib\Model # 自定义模型必须集成weeio-lite模型初始化类\weeio\lib\Model
{
public function get_all()
{
return self::$_db->select(
'user', # 数据库表名
'*' # 查询字段
);
}
}
-- 控制器: Index.php
<?php
namespace app\Api\Controller;
class Index
{
# 方法1:
public function index()
{
# 使用自定义Model
$model = new \app\Api\Model\User();
echo json_encode($model->get_all());
}
# 方法2:
public function test()
{
# 通过 M()函数直接获得数据操作实例对象
$data = M()->select(
'user', # 数据库表名
'*' # 查询字段
);
echo json_encode($data);
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。