{"id":45531920,"url":"https://github.com/phpframe-project/template","last_synced_at":"2026-06-14T03:01:59.183Z","repository":{"id":333239584,"uuid":"1136647435","full_name":"phpframe-project/template","owner":"phpframe-project","description":null,"archived":false,"fork":false,"pushed_at":"2026-06-14T01:24:17.000Z","size":32,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-14T02:13:09.664Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/phpframe-project.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-01-18T04:24:58.000Z","updated_at":"2026-06-14T01:22:52.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/phpframe-project/template","commit_stats":null,"previous_names":["phpframe-project/template"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/phpframe-project/template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phpframe-project%2Ftemplate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phpframe-project%2Ftemplate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phpframe-project%2Ftemplate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phpframe-project%2Ftemplate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phpframe-project","download_url":"https://codeload.github.com/phpframe-project/template/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phpframe-project%2Ftemplate/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34307685,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-14T02:00:07.365Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-02-23T01:26:17.718Z","updated_at":"2026-06-14T03:01:59.161Z","avatar_url":"https://github.com/phpframe-project.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PHPFrame 项目模板\n\n基于 [PHPFrame](https://github.com/phpframe-project/phpframe) 框架的项目模板，支持 FPM / CLI（ReactPHP 常驻内存）/ Shell 三模式运行。\n\n## 快速开始\n\n```bash\n# 创建项目\ncomposer create-project phpframe-project/template my-project\ncd my-project\n\n# 环境配置\ncp .env.example .env\n# 编辑 .env 配置数据库、Redis 等\n\n# 启动开发服务器\nphp -S localhost:8000 -t public/\n\n# 启动 CLI 常驻服务器（支持多 Worker）\nphp cli.php server start --host=0.0.0.0 --port=8000 --worker=4\n\n# 执行 Shell 命令\nphp shell.php default/test name=user1 email=user1@example.com\n```\n\n## 目录结构\n\n```\nmy-project/\n├── app/\n│   ├── Controllers/\n│   │   ├── Default/              # HTTP 控制器（继承 BaseController）\n│   │   │   ├── Controller.php    # 控制器基类（可添加 before/after 钩子）\n│   │   │   └── DefaultController.php\n│   │   └── Shell/                # Shell 控制器（继承 BaseShell）\n│   │       ├── DefaultShell.php\n│   │       └── DatabaseShell.php\n│   ├── Library/                  # 自定义类库\n│   ├── Middleware/               # 中间件\n│   │   ├── AuthMiddleware.php\n│   │   └── CorsMiddleware.php\n│   ├── Models/                   # 数据模型（Eloquent）\n│   │   └── User.php\n│   └── Services/                 # 业务服务\n│       └── UserService.php\n├── config/                       # 配置文件（自动加载）\n│   ├── app.php                   # 应用配置\n│   ├── database.php              # 数据库配置\n│   ├── cache.php                 # 缓存配置\n│   ├── log.php                   # 日志配置\n│   └── exception.php             # 异常处理配置\n├── database/\n│   └── field_template.php        # 模型字段生成模板\n├── public/\n│   └── index.php                 # FPM 入口\n├── resources/\n│   └── templates/                # Twig 模板\n├── routes/\n│   ├── default.php               # HTTP 路由\n│   └── shell.php                 # Shell 路由\n├── runtime/                      # 运行时目录（日志、缓存，自动创建）\n├── cli.php                       # CLI 入口\n├── shell.php                     # Shell 入口\n├── .env.example                  # 环境变量示例\n└── composer.json\n```\n\n## 三种运行模式\n\n### FPM 模式\n\n传统 PHP-FPM 或内置开发服务器，适合传统 Web 部署：\n\n```bash\nphp -S localhost:8000 -t public/\n```\n\n### CLI 模式（ReactPHP 常驻内存）\n\n高性能常驻内存服务器，支持多 Worker 进程：\n\n```bash\n# 前台运行\nphp cli.php server start --host=0.0.0.0 --port=8000 --worker=4\n\n# 守护进程\nphp cli.php server start --host=0.0.0.0 --port=8000 --worker=4 --daemon\n\n# 停止\nphp cli.php server stop\n```\n\n### Shell 模式\n\n命令行任务执行，适合定时任务、数据迁移、批量处理：\n\n```bash\nphp shell.php default/test name=user1 email=user1@example.com\nphp shell.php database/tables\nphp shell.php database/describe table_name\nphp shell.php database/build-structure\nphp shell.php database/build-model-fields\n```\n\n## 核心用法\n\n### 路由\n\n在 `routes/default.php` 中定义 HTTP 路由：\n\n```php\nuse PHPFrame\\Facades\\Route;\nuse App\\Controllers\\Default\\DefaultController;\n\n// 闭包\nRoute::get('/', function() {\n    return 'Hello World';\n});\n\n// 控制器方法\nRoute::get('/users', [UserController::class, 'listAction']);\nRoute::post('/users', [UserController::class, 'createAction']);\nRoute::put('/users/{id}', [UserController::class, 'updateAction']);\nRoute::delete('/users/{id}', [UserController::class, 'deleteAction']);\n\n// 路由组\nRoute::group('/api', function () {\n    Route::get('/users', [UserController::class, 'listAction']);\n});\n```\n\n在 `routes/shell.php` 中定义 Shell 路由：\n\n```php\nRoute::shell('default/test', [DefaultShell::class, 'testAction']);\n```\n\n### 控制器\n\nHTTP 控制器继承 `BaseController`：\n\n```php\nnamespace App\\Controllers\\Default;\n\nuse PHPFrame\\BaseController;\n\nclass UserController extends Controller\n{\n    public function listAction()\n    {\n        $page = $this-\u003egetParam('page', 1);\n        $users = Db::table('users')-\u003epaginate(15, ['*'], 'page', $page);\n        return $this-\u003ejson(['code' =\u003e 0, 'data' =\u003e $users]);\n    }\n\n    public function createAction()\n    {\n        $data = $this-\u003erequest-\u003epost();\n        // 验证并创建...\n        return $this-\u003ejson(['code' =\u003e 0, 'message' =\u003e 'created']);\n    }\n}\n```\n\nShell 控制器继承 `BaseShell`：\n\n```php\nnamespace App\\Controllers\\Shell;\n\nuse PHPFrame\\BaseShell;\n\nclass DefaultShell extends BaseShell\n{\n    public function testAction()\n    {\n        $params = $this-\u003egetParams();\n        $this-\u003eoutput(\"参数: \" . json_encode($params));\n        $this-\u003elog(\"执行测试命令\");\n    }\n}\n```\n\n### 中间件\n\n```php\nuse PHPFrame\\Facades\\Route;\nuse App\\Middleware\\AuthMiddleware;\n\n// 全局中间件\nRoute::middleware(new CorsMiddleware());\n\n// 路由级中间件\nRoute::registerMiddleware('auth', new AuthMiddleware());\nRoute::handlerMiddleware('App\\Controllers\\UserController@profile', ['auth']);\n```\n\n### 门面\n\n```php\nuse PHPFrame\\Facades\\Log;\nuse PHPFrame\\Facades\\Db;\nuse PHPFrame\\Facades\\Cache;\nuse PHPFrame\\Facades\\Config;\n\nLog::info('User logged in', ['user_id' =\u003e 123]);\n$users = Db::table('users')-\u003eget();\nCache::set('key', 'value', 3600);\n$name = Config::get('app.name');\n```\n\n### 依赖注入\n\n```php\n// 单例服务\napp()-\u003eset('my_service', function ($c) {\n    return new MyService($c-\u003eget('db'));\n});\n\n// 原型服务（每次解析返回新实例）\napp()-\u003eprototype('request', function ($c) {\n    return Request::createFromGlobals();\n});\n\n// 使用\n$service = app('my_service');\n```\n\n### 配置\n\n配置文件放在 `config/` 目录下，自动加载。支持环境覆盖：\n\n```\nconfig/app.php                # 基础配置\nconfig/app.production.php     # 生产环境覆盖（APP_ENV=production 时自动合并）\n```\n\n```php\n// 读取\nconfig('app.name');\nconfig('database.connections.default.host', '127.0.0.1');\n\n// 运行时修改（不持久化）\napp('config')-\u003eset('app.debug', true);\n```\n\n### 缓存\n\n```php\nuse PHPFrame\\Facades\\Cache;\n\nCache::set('key', 'value', 3600);\n$value = Cache::get('key');\nCache::delete('key');\nCache::deleteByPattern('users:*');  // 模式删除（Redis）\n```\n\n### 数据库\n\n```php\nuse PHPFrame\\Facades\\Db;\n\n// 查询构建器\n$users = Db::table('users')-\u003ewhere('active', 1)-\u003eget();\n\n// 事务\nDb::transaction(function () {\n    Db::table('users')-\u003einsert([...]);\n    Db::table('orders')-\u003einsert([...]);\n});\n```\n\n### 日志\n\n```php\nuse PHPFrame\\Facades\\Log;\n\nLog::info('Info message');\nLog::error('Error message', ['context' =\u003e $data]);\nLog::warning('Warning message');\n```\n\n### 模板渲染\n\n```php\n// 在控制器中\nreturn $this-\u003erender('/default/test.twig', ['name' =\u003e 'PHPFrame']);\n```\n\n### JSON 响应\n\n```php\nreturn $this-\u003ejson(['code' =\u003e 0, 'data' =\u003e $users]);\n```\n\n### 重定向\n\n```php\nreturn $this-\u003eredirect('/login', 302);\n```\n\n## 环境变量\n\n复制 `.env.example` 为 `.env` 并按需修改：\n\n| 变量 | 说明 | 默认值 |\n|------|------|--------|\n| `APP_NAME` | 应用名称 | PHPFrame |\n| `APP_ENV` | 环境（local/production） | local |\n| `APP_DEBUG` | 调试模式 | true |\n| `DB_HOST` | 数据库主机 | 127.0.0.1 |\n| `DB_DATABASE` | 数据库名 | phpframe |\n| `CACHE_DRIVER` | 缓存驱动（redis/file） | redis |\n| `REDIS_HOST` | Redis 主机 | 127.0.0.1 |\n\n## 环境要求\n\n- PHP \u003e= 8.1\n- ext-pdo\n- ext-pcntl（多 Worker 模式）\n- ext-redis（Redis 缓存驱动）\n\n## 文档\n\n完整文档请参阅 [PHPFrame 文档](https://github.com/phpframe-project/phpframe/tree/main/docs)。\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphpframe-project%2Ftemplate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphpframe-project%2Ftemplate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphpframe-project%2Ftemplate/lists"}