Skip to content

Commit 56f783c

Browse files
committed
init docs
1 parent b59a3de commit 56f783c

16 files changed

+744
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.DS_Store

.nojekyll

Whitespace-only changes.

_coverpage.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
![logo](https://gitee.com/mrxzx/LyApi/raw/master/public/favicon.ico)
2+
3+
# LyApi 2.X
4+
5+
> LyApi Framework 全新升级!
6+
7+
8+
[OSC@Git](https://gitee.com/mrxzx/LyApi.git)
9+
[开始](#前言)

_sidebar.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
* [前言](/?id=前言)
2+
* [项目部署](/deploy.md)
3+
* [路由系统](/route.md)
4+
* [控制器系统](/controller.md)
5+
* [事件监听](/event.md)
6+
* [数据缓存](/cache.md)
7+
* [数据库操作](/database.md)
8+
* [拓展程序](/extends/index.md)

cache.md

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
# 缓存系统
2+
3+
> LyApi 2.X 相对 1.X 提供了更加强大的缓存系统。
4+
5+
## 文件缓存
6+
7+
> 文件缓存即为将数据写入到本地文件中,属于最方便的缓存方法。
8+
9+
### 获取对象
10+
11+
框架内置了两个缓存相关的类:**FileCache****Cache**
12+
13+
它们都用于缓存的相关操作,前者为文件缓存的专属类,而后者包含了 Redis 等其他方案。
14+
15+
当您确定要使用文件缓存时,最好使用 FileCache 类,它会减少不必要的加载和检测。
16+
17+
```php
18+
// FileCache 需要先获取对象,再进行操作
19+
$cache = new FileCache("group_name");
20+
$cache->set("name","liuzhuoer");
21+
22+
// 而 Cache 则定义了静态函数,可直接调用
23+
Cache::set("name","liuzhuoer");
24+
```
25+
26+
Cache 对象在加载时会根据框架配置文件加载相应的设定:
27+
28+
**Application\Config\cache.php: cache_system**
29+
30+
你也可以使用静态函数 **Cache::system("FILE")** 切换至文件缓存。
31+
32+
33+
### 设置数据
34+
35+
```php
36+
// 三个参数:Key Value Expire
37+
Cache::set("name","liuzhuoer",60 * 1000);
38+
```
39+
40+
Key 和 Value 就不必解释了吧,这第三个参数代表数据过期时间。
41+
42+
Expire 默认为 0 代表不过期,**60 × 1000** 则代表了一分钟。
43+
44+
!> 当你传入的值为 **Object** 类型,系统会自动将其转换为 JSON 再写入。
45+
46+
47+
### 读取数据
48+
49+
```php
50+
$my_name = Cache::get("name");
51+
```
52+
53+
当数据不存在则会返回一个空字符串。(数据过期一样)
54+
55+
!> 建议先调用 **Cache::has** 后在做获取,这是一个好的习惯。
56+
57+
### 判断数据
58+
59+
```php
60+
if (Cache::has("name")) {
61+
// do some thing ...
62+
} else {
63+
throw new Exception("数据不存在...");
64+
}
65+
```
66+
判断一个缓存键是否存在,在读取前判断是一个好习惯哦!
67+
68+
### 自增数据
69+
70+
```php
71+
// 参数:Key Add
72+
Cahce::inc("name",1);
73+
```
74+
s
75+
很好理解,就是让一条数据在其基础上增加一个值。默认 +1。
76+
77+
当你想让它减少时,第二个参数给个负值即可。
78+
79+
!> 仅限储存类型为数字,其他类型无法操作。
80+
81+
82+
### 删除数据
83+
84+
```php
85+
Cache::delete("name");
86+
```
87+
88+
删除一个缓存键,不需要多解释吧 😝
89+
90+
### 清空数据
91+
92+
```php
93+
Cache::clean();
94+
```
95+
96+
一行代码将清空所有的缓存(仅当前分组)

controller.md

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
# 控制器系统
2+
3+
> 控制器是应用中最重要的模块,决定了每次访问将被怎么处理。
4+
5+
## ⚽控制器基础
6+
7+
一个控制器即为一个类文件,这个类中的函数即为控制器的最终处理程序。
8+
9+
一个简单的控制器:
10+
11+
```php
12+
class Main extends ViewCon
13+
{
14+
public function index($req, $resp)
15+
{
16+
return View::render('index', []);
17+
}
18+
}
19+
```
20+
21+
它只有一个函数:“index”,这个函数的结果为渲染 index.html 的模板引擎。
22+
23+
在大部分功能中要访问一个控制器只需要使用:**Namespace.Class.Function**
24+
25+
当控制器位于 application/Controller 的根目录下时,命名空间不需要填写。
26+
27+
比如在路由绑定中填写对应的控制器:"**Main.index**"
28+
29+
## 🎯控制器父类
30+
31+
控制器所继承的类决定了本控制器最终结果将以什么模式去展现:
32+
33+
- JSON - 接口常用
34+
- HTML - 网站常用
35+
36+
以及一些自定义的结构,都可以使用控制器父类来实现。
37+
38+
以下是系统默认的接口控制器父类实现方式:
39+
40+
```php
41+
class ApiCon extends Bcontrol
42+
{
43+
public function _export($data)
44+
{
45+
return View::api($data, API_STRUCTURE_INFO);
46+
}
47+
}
48+
```
49+
50+
父类也需要继承 Bcontrol 这个对象。没有理由,继承就行了。
51+
52+
**_export** 函数则是最终结果输出的实现,如上方代码则是调用了 View 中的 API 生成器来完成结果处理。
53+
54+
你也可以在 控制器父类 中定义一些特有的函数供控制器调用。
55+
56+
## 🎱控制器参数
57+
58+
每个控制器函数都需要接受至少两个参数:$req 和 $resp
59+
60+
它们分别代表:Request 对象 和 Response 对象。
61+
62+
其中 $req 可以使用 **$req->variable** 取得路由的动态参数。
63+
64+
或者:
65+
- $req->args("name") 获取Get参数。
66+
- $req->form("name") 获取Post参数。
67+
68+
而 $resp 则是基础的 **重定向、错误报出** 等功能的实现。
69+
70+
## 🏈关于其他
71+
72+
控制器本身的功能并不多,但是应用的所有业务逻辑都是在这里完成的,所以它非常重要!😏

database.md

Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
# 数据库操作
2+
3+
> 缺少了数据库相关的操作,后端开发将缺少了意义。
4+
5+
## 数据库选择
6+
7+
市面上有很多优秀的数据库,它们的存在总是有意义的,没有绝对好的系统,只有适合自己项目的系统。
8+
9+
LyApi 2.X 采用了方便简洁的 Medoo 操作库,它支持了很多市面上热门的数据库系统:
10+
11+
- MySQL, MariaDB -> php_pdo_mysql
12+
- MSSQL (Windows) -> php_pdo_sqlsrv
13+
- MSSQL (Liunx/UNIX) -> php_pdo_dblib / php_pdo_sqlsrv
14+
- Oracle -> php_pdo_oci
15+
- Oracle version 8 -> php_pdo_oci8
16+
- SQLite -> php_pdo_sqlite
17+
- PostgreSQL -> php_pdo_pgsql
18+
- Sybase -> php_pdo_dblib
19+
20+
它们都是关系型数据库系统,但市面上还有一种非关系型的数据库类型:
21+
22+
- MongoDB
23+
- Cassandra
24+
- Memcached
25+
- HBase
26+
- Redis
27+
- ...
28+
29+
#### 关系型 和 非关系型
30+
31+
写过 PHP 的应该都知道 MySQL 吧,它的数据都是存在一个个数据表中的,而数据表都是表项的,也就是说你只能在数据项的限制下才能插入数据:如果 “UserName” 的数据项类型为字符串,那你就不能直接将一个数字插入进去。—— 简单地说就是有严格限制格式。
32+
33+
而非关系型数据库,如 Mongodb 则不会有很严格的限制,Mongodb是文档式的储存方式,在一条数据表下,你的每条数据的格式都是可以随意变化的。比如说一个 “user_table” 两条数据有的数据项可以完全不一样,第一条有的属性,第二条可以没有。 —— 简单说就是没限制。
34+
35+
这两种类型的数据库不存在好与坏的区分,它们适合的是不同的项目类型。
36+
37+
一般正常的项目使用 MySQL 足矣,但如果你的项目数据结构是在不断变化的,就可以考虑非关系型数据库了。
38+
39+
## 数据库连接
40+
41+
LyApi 2.X 封装了特殊的数据库连接方式,你需要在 application/Config/database.php 下进行配置:
42+
43+
```php
44+
return [
45+
"mydb" => [
46+
'server' => '127.0.0.1',
47+
'username' => 'root',
48+
'password' => 'root',
49+
'database_name' => 'mysql',
50+
'charset' => 'utf8',
51+
'database_type' => 'mysql'
52+
]
53+
];
54+
```
55+
56+
你可以在这里返回所有会用到的数据库连接配置,框架会根据在使用时的选择自动连接到相应的数据库。
57+
58+
通过 Connector 对象取得 Medoo 连接:
59+
60+
```php
61+
62+
$ctor = new Connector();
63+
$conn = $ctor->mydb;
64+
// --------- 分割线 --------- //
65+
$conn = Connector::connect("mydb");
66+
```
67+
68+
上方有两种方法可以获取到数据库连接(前提是有相应 Key 的配置)
69+
70+
71+
## 数据库操作
72+
73+
虽然说后端涉及到很多知识,但归根结底,我们所完成的任务基本上就是 **CURD**
74+
75+
CURD即:Create Update Read Delete (增删改查)
76+
77+
所以说数据库的操作在后端开发中是至关重要滴 🤠
78+
79+
!> 下方文档仅提供简单演示,完整文档请移步:[Medoo Database Framework](https://medoo.in/doc)
80+
81+
### 数据插入
82+
83+
数据库中的每条数据都是程序插入(创建)的,所以它至关重要!
84+
85+
```php
86+
// 第一个参数为操作的表名(Medoo 所有操作第一参数都为表名)
87+
$conn->insert("my_table",[
88+
89+
// 第二参数则是一个数组,用于设置相关的属性
90+
// 如果表结构设置可空或默认值,也可以不设置
91+
92+
'username' => 'liuzhuoer',
93+
'password' => '123456789'
94+
]);
95+
```
96+
97+
### 数据查询
98+
99+
!> 查询函数过于复杂,建议前往 [Medoo 官网](https://medoo.in/doc) 查看!
100+
101+
先来个基础的查询操作:
102+
103+
```php
104+
// 一般会使用到的有三个参数:
105+
106+
// 第一个:表名
107+
// 第二个:查询字段名(即需要的结果有哪些字段)
108+
// 第三个:条件(相当于SQL中的 Where )
109+
110+
// 查询 id 为 1 的数据,只要 username 和 email 两个值
111+
$data = $conn->select("my_table", [
112+
"username",
113+
"email"
114+
], [
115+
"id" => 1
116+
]);
117+
```
118+
119+
接下来是稍微高级的操作:
120+
121+
122+
```php
123+
// 查询字段为 * 即代表取得所有字段信息
124+
// age[>] 相当于查询 age 大于 18 的信息
125+
126+
$data = $conn->select("my_table", "*", [
127+
"age[>]" => 18
128+
]);
129+
```
130+
131+
select 函数可能查询多条数据,如果你只要一条,请使用 **get** 函数:
132+
133+
```php
134+
// 结构和上方代码一样,但本次只取得第一条符合条件的数据
135+
$data = $conn->get("my_table", "*", [
136+
"age[>]" => 18
137+
]);
138+
```
139+
140+
141+
### 更新数据
142+
143+
!> 更新函数过于复杂,建议前往 [Medoo 官网](https://medoo.in/doc) 查看!
144+
145+
```php
146+
147+
// 第二位参数为更新的数据
148+
// 第三位参数同SQL Where
149+
150+
$conn->update("my_table",[
151+
152+
// 先将 Email 更新为 [email protected]
153+
// 然后 Age = Age + 1 (相当于自增)
154+
155+
"email" => "[email protected]",
156+
"age[+]" => 1
157+
],[
158+
"username" => 'liuzhuoer'
159+
]);
160+
```
161+
162+
### 删除数据
163+
164+
```php
165+
166+
// 第二位参数相当于 SQL Where
167+
168+
$conn->update("my_table",[
169+
170+
// 删除用户名为 liuzhuoer 的数据
171+
172+
"username" => 'liuzhuoer'
173+
]);
174+
```

0 commit comments

Comments
 (0)