# abbs
**Repository Path**: wfdaj/abbs
## Basic Information
- **Project Name**: abbs
- **Description**: 请注意:仓库路径即仓库访问 URL 地址,更改仓库路径将导致原克隆地址不可用
- **Primary Language**: PHP
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-03-11
- **Last Updated**: 2026-06-01
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ZEngine
一个轻量级的 PHP 框架。没有冗余代码,只包含你真正需要的核心功能。
需要详细的文档?查看 ZEngine DeepWiki(由 AI 生成,可能存在文档错误)
## 为什么选择 ZEngine?
我厌倦了拥有数千个文件的复杂框架。ZEngine 非常简单 —— 你可以在一个下午内阅读完整个源代码,并确切地理解正在发生的事情。
## 包含的功能
- **路由** - 将 URL 映射到函数,支持参数、路由分组
- **中间件** - 保护路由、处理认证等任何你需要的功能
- **数据库** - 不碍事的查询构建器
- **服务** - Session、Cookie、缓存、验证、日志等
- **依赖注入** - 自动注入,无需 XML 配置
- **错误页面** - 自定义错误处理,带有漂亮的调试屏幕
## 环境要求
- PHP 8.1+
- Composer
- 仅此而已
## 安装
创建新项目:
```bash
composer create-project spexdw/z-engine my-project
cd my-project
```
或直接克隆:
```bash
git clone https://github.com/spexdw/z-engine.git my-project
cd my-project
composer install
```
## 快速开始
1. 编辑 `config/env.php` 并设置你的配置
2. 编辑 `app/routes.php` 添加你的路由
```php
$router->get('/hello/{name}', function ($name) {
return json(['message' => "你好, $name!"]);
});
```
就这样。没有生成器,没有样板代码,直接写代码就行。
## 路由
```php
// 基础路由
$router->get('/users', function () {
return json(['users' => []]);
});
$router->post('/users', function (Request $request) {
$data = $request->json();
return json(['created' => $data], 201);
});
// 其他 HTTP 方法
$router->put('/users/{id}', function ($id, Request $request) {
return json(['updated' => $id]);
});
$router->patch('/users/{id}', function ($id) {
return json(['patched' => $id]);
});
$router->delete('/users/{id}', function ($id) {
return json(['deleted' => $id]);
});
$router->any('/endpoint', function () {
return json(['method' => 'any']);
});
// URL 参数
$router->get('/users/{id}', function ($id) {
return json(['user_id' => $id]);
});
// 使用中间件保护路由
$router->get('/admin', function () {
return json(['secret' => 'data']);
})->middleware(AdminMiddleware::class);
// 路由分组
$router->group(['prefix' => '/api'], function ($router) {
$router->get('/users', fn() => json([]));
$router->get('/posts', fn() => json([]));
});
// 控制器用法
$router->get('/users', 'UserController@index');
$router->post('/users', [UserController::class, 'store']);
```
## 控制器
在 `app/controller` 中创建控制器:
```php
namespace app\controller;
use core\Request;
class UserController
{
public function index()
{
$users = db()->table('users')->get();
return view('users.index', ['users' => $users]);
}
public function store(Request $request)
{
$data = $request->all();
$id = db()->insert('users', $data);
return json(['id' => $id], 201);
}
}
```
## 视图
在 `app/view` 中创建视图:
```php
// 返回视图
return view('welcome'); // app/view/welcome.php
return view('users.index', ['users' => $users]); // app/view/users/index.php
// 使用视图助手
$router->get('/', function () {
return view('welcome', ['name' => '张三']);
});
```
## 请求与响应
```php
// 请求助手
$name = $request->input('name'); // 从 POST 或 GET 获取
$email = $request->get('email'); // 从查询字符串获取
$data = $request->post('data'); // 从 POST 获取
$all = $request->all(); // 获取所有输入数据
$json = $request->json(); // JSON 负载
$token = $request->header('Authorization'); // 请求头
$bearer = $request->bearerToken(); // Bearer token
$file = $request->file('upload'); // 上传的文件
$ip = $request->ip(); // 客户端 IP
// 响应助手
return json(['data' => []], 200); // JSON 响应
return view('page', ['key' => 'value']); // 视图响应
return redirect('/home'); // 重定向
return Response::make('content', 200); // 纯文本
```
## 数据库
```php
// 查询构建器
$users = db()->table('users')
->where('status', 'active')
->orderBy('created_at', 'DESC')
->get();
// 获取第一条记录
$user = db()->table('users')->where('id', 1)->first();
// 统计记录数
$count = db()->table('users')->where('status', 'active')->count();
// limit & offset 分页
$users = db()->table('users')->limit(10)->offset(20)->get();
// 按 ID 查找
$user = db()->find('users', 1);
// 原生查询
$results = db()->query('SELECT * FROM users WHERE id = ?', [1]);
// 插入/更新/删除
db()->insert('users', ['name' => '张三', 'email' => 'zhangsan@example.com']);
db()->update('users', ['status' => 'active'], ['id' => 1]);
db()->delete('users', ['id' => 1]);
// 事务
db()->beginTransaction();
try {
db()->insert('users', ['name' => '张三']);
db()->commit();
} catch (Exception $e) {
db()->rollback();
}
```
## 服务
```php
// Session
session()->set('user_id', 123);
$userId = session()->get('user_id');
$token = session()->token(); // CSRF token
// 缓存
cache()->put('key', 'value', 300); // 5分钟
$value = cache()->get('key');
// 带回调的缓存(key 不存在时才执行)
$users = cache()->remember('users', 3600, function () {
return db()->table('users')->get();
});
// Cookie
cookie()->set('theme', 'dark', time() + 3600);
$theme = cookie()->get('theme');
// 验证
$rules = ['email' => 'required|email', 'age' => 'min:18'];
$isValid = validator()->validate($data, $rules);
// 日志
logger()->error('出问题了', ['context' => '详情']);
logger()->warning('警告消息');
logger()->info('信息消息');
logger()->debug('调试数据', ['user_id' => 123]);
// 事件
event()->listen('user.registered', function ($userId) {
logger()->info('用户注册成功,ID:' . $userId);
});
event()->dispatch('user.registered', 123);
// 哈希(密码哈希)
$hash = hasher()->make('password123');
$isValid = hasher()->check('password123', $hash);
// 邮件
mail()->send('user@example.com', '欢迎!', '你好,欢迎使用我们的应用!');
// 限流
$rateLimit = ratelimit()->check('api.endpoint', [
'1minute' => 10,
'1hour' => 100
]); // 你可以传入自定义标识符
if ($rateLimit) {
return Response::json(['error' => $rateLimit], 429);
}
```
## 中间件
在 `app/middleware` 中创建中间件:
```php
class AuthMiddleware
{
public function handle(Request $request, Closure $next)
{
if (!$request->header('Authorization')) {
return Response::json(['error' => '未授权'], 401);
}
return $next($request);
}
}
```
使用它:
```php
$router->get('/dashboard', function () {
return json(['data' => 'secret']);
})->middleware(AuthMiddleware::class);
```
## 自定义服务
将你的服务添加到 `core/Providers.php`:
```php
private static function registerMyService(Container $container): void
{
$container->singleton('myservice', function () {
return new MyService();
});
}
```
然后在 `register()` 方法中调用 `self::registerMyService($container);`。
在任何地方使用它:
```php
$result = app('myservice')->doSomething();
```
## 定时任务(Tasks)
将你的定时任务添加到 `app\task\MyCron`,然后将任务添加到 `/cron.php`
```php
try {
$doSomething = new DoSomething();
$doSomething->handle();
} catch (\Exception $e) {
echo "错误:" . $e->getMessage() . "\n";
}
```
注意:cron.php 只能通过 CLI 访问,并需要 CRON_KEY
## 错误处理
在 `.env` 中设置 `APP_DEBUG=true` 可以获得带有代码片段的详细错误页面。
生产环境设置 `APP_DEBUG=false` 以显示简洁的错误页面。
设置 `MAINTENANCE_MODE=1` 进入维护模式(包含 IP 白名单和维护消息)
所有错误都记录到 `storage/logs/error.log`。
## 贡献
发现 bug?想要新功能?请创建 Issue 或 PR。保持简单。
## 许可证
MIT。你可以随心所欲地使用它。
## 致谢
由 [spexdw](https://github.com/spexdw) 构建,因为现有框架太复杂了 :p