{"id":21486546,"url":"https://github.com/elapse-annals/swift-cms","last_synced_at":"2025-06-22T20:34:14.570Z","repository":{"id":53453115,"uuid":"192045692","full_name":"elapse-annals/swift-cms","owner":"elapse-annals","description":"swift CMS","archived":false,"fork":false,"pushed_at":"2021-03-30T11:18:21.000Z","size":8217,"stargazers_count":1,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-17T10:12:31.485Z","etag":null,"topics":["cms","laravel-cms","php-cms","swift-cms"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/elapse-annals.png","metadata":{"files":{"readme":"README-ZH.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null}},"created_at":"2019-06-15T06:36:04.000Z","updated_at":"2020-09-03T04:34:08.000Z","dependencies_parsed_at":"2022-09-09T03:11:10.687Z","dependency_job_id":null,"html_url":"https://github.com/elapse-annals/swift-cms","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/elapse-annals/swift-cms","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elapse-annals%2Fswift-cms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elapse-annals%2Fswift-cms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elapse-annals%2Fswift-cms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elapse-annals%2Fswift-cms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/elapse-annals","download_url":"https://codeload.github.com/elapse-annals/swift-cms/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elapse-annals%2Fswift-cms/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261362163,"owners_count":23147346,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["cms","laravel-cms","php-cms","swift-cms"],"created_at":"2024-11-23T13:22:06.535Z","updated_at":"2025-06-22T20:34:09.523Z","avatar_url":"https://github.com/elapse-annals.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"[English](README.md) | 中文\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"https://laravel.com/assets/img/components/logo-laravel.svg\"\u003e\u003cb align=\"center\"\u003ePlus\u003c/b\u003e \u003c/p\u003e\n\n![php-badge](https://img.shields.io/badge/php-%3E%3D%207.2-8892BF.svg)\n![laravel-badge](https://img.shields.io/badge/Laravel%20-%3E%3D6.2-red.svg)\n[![Build Status](https://api.travis-ci.org/ElapseAnnals/LaravelPlus.svg)](https://travis-ci.org/ElapseAnnals/LaravelPlus)\n\u003cimg class=\"latest_stable_version_img\" title=\"latest stable version\" src=\"https://poser.pugx.org/elapse-annals/laravel-plus/v/stable\"\u003e\n\u003cimg class=\"total_img\" title=\"total\" src=\"https://poser.pugx.org/elapse-annals/laravel-plus/downloads\"\u003e\n\u003cimg class=\"latest_unstable_version_img\" title=\"latest unstable version\" src=\"https://poser.pugx.org/elapse-annals/laravel-plus/v/unstable\"\u003e\n[![License](https://poser.pugx.org/elapse-annals/laravel-plus/license)](LICENSE)\n[![composer.lock](https://poser.pugx.org/elapse-annals/laravel-plus/composerlock)](https://packagist.org/packages/elapse-annals/laravel-plus)\n\n## 介绍\n[LaravelPlus](https://github.com/ElapseAnnals/LaravelPlus) 基于 [Laravel](https://github.com/laravel/laravel) 增加部分软件包初始安装和进行业务使用功能改动，来创建一个开箱即用的应用.\n\n拓展功能\n- 自动 Laravel 与 Vue/Element UI 基于基础模型的代码生成器。\n- 多进程使用\n- 环境配置切换\n\n## 目的\n为了减少重复 CURD 和新项目的配置麻烦等问题，如：\n* 现有的 infyomlabs/laravel-generator CODE 生成工具虽然好用，但是不太喜欢样式和代码结构。\n* 有些本地，测试，线上的配置需要频繁改动的需要。\n* 多个项目构建引入包，配置扩展等重复性操作\n* 基于 ReactPHP 多进程使用\n* Where 条件语句自动生成\n\n## 版本基础\n\n当前稳定版本：\u003cimg class=\"latest_stable_version_img\" src=\"https://poser.pugx.org/elapse-annals/laravel-plus/v/stable\"\u003e\n\n当前版本基于 \n\n| PHP     | Laravel |\n|:-------:|:-------:|\n| \u003e=7.2 | \u003e=6.0    |\n\n## 文档\n\n具体 [Wiki](https://github.com/ElapseAnnals/LaravelPlus/wiki)  （待完善）\n\n\n## 运行环境要求\n- 已安装 PHP\n- 脚本运行前置要求（任意一种）\n    - [homestead](https://learnku.com/docs/laravel/5.5/homestead/1285) 中(推荐)\n    - *unix 环境\n    - Windows 下安装 [cmder](https://cmder.net/) - [下载地址](https://cmder.en.softonic.com/)\n    - cmd 运行未进行兼容（现有异常会不过滤和清理部分文件） (不推荐)\n\n## 项目使用\n\n#### 1.下载项目\n```php\n// A. github （推荐）\n$ git clone https://github.com/ElapseAnnals/laravel-plus.git   \n$ git checkout 5.8.0 // 切换至当前最新稳定版本\n```\n或\n```php\n// B. composer\n$ composer create-project elapse-annals/laravel-plus\n$ mv laravel-plus  LaravelPlus\n```\n #### 2.创建新项目 \n \n```php\n//  A.在当前目录运行自动复制脚本 （ 推荐）\n$ php LaravelPlus/create YourProject\n```\n 或 \n```\n//  B.在当前目录手动复制项目至自身项目\n$ cd LaravelPlus\n$ rm composer.lock\n$ rsync -av --exclude  . --exclude  .. --exclude  .git/ --exclude  vendor/ --exclude  .github/ LaravelPlus/* YourProject             \n\t\t\t\t\t//  为消除对称  */         \n$ cd YourProject\n$ rm composer.lock .env .travis\n$ cp .env.example .env   \n```\n#### 3.新项目初始化\n```php\n$ cd YourProject //  进入 YourProject 项目中\n$ composer install   // 安装依赖软件包 （请先已安装 composer ）\n$ php artisan key:generate    // 更新 key\n$ php artisan vendor:publish // 发布扩展包的资源\n$ php artisan migrate  // 迁移数据库\n\n// 以下非必须\n$ php artisan storage:link // 图片资源软连接映射\n$ php artisan clear-compiled // 清理编译\n$ php artisan ide-helper:generate // 生成 ide 辅助提示\n$ php artisan vendor:publish --provider=\"Barryvdh\\LaravelIdeHelper\\IdeHelperServiceProvider\" --tag=config // 加入配置\n$ php artisan ide-helper:meta  // 生成 PHPStorm 辅助提示(重启 PHPStorm)\n$ php artisan ide-helper:models //  生成模型辅助提示\n```\nTips:\n1. 兼容 laravel-plus 目录名\n\n2. [Composer 镜像](https://learnku.com/composer/t/4484/composer-mirror-use-help)\n\n aliyun\n ```php\n $ composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/\n ```\n \ncnpkg\n```php\n $ composer config -g repos.packagist composer https://php.cnpkg.org\n ```\n\n3. Composer  加速工具 prestissimo 引入\n```php\n$ composer global require hirak/prestissimo\n```\n \n#### 4.更新项目\n```shell script\nphp LaravelPlus/update YourProject\n``` \n\n\n\u003chr\u003e\n\n## 功能使用说明\n\n##### 创建分层脚本和[资源映射:想法来源](https://learnku.com/docs/laravel/5.8/controllers/1296#resource-controllers)\n\nframework 脚本创建内容：\n- Controller, Service, Repository 等文件和对应关联关系\n- Route 资源路由增加\n- Controller 中资源类型代码和模型数据处理（开发中）\n\n\n直接使用本项目内容（推荐）\n```\n $ php artisan make:framework Test  // 创建分层结构（推荐）\n $ php artisan make:framework Test --basis  // 创建系统分层和主要分层结构（Controller, Service, Repository）\n $ php artisan make:framework Test --D // 删除分层结构 \n```\n\n或引入 [php-tool/laravel-plus-make](https://github.com/PHPTool/LaravelPlusMake) Laravel Plus Make 插件软件包（更新进度慢）\n```php\n$ composer require php-tool/laravel-plus-make\n```\n\n效果图：\n![image](https://github.com/ElapseAnnals/LaravelPlus/tree/master/storage/app/public/images/readme/frameworrk_index.png)\n\nTips:\n- 注意文件被其它服务占用问题，可进行重启尝试\n    （Failed to clear cache. Make sure you have the appropriate permissions.）\n- 使用导出需要在 web.php 中 export 注册路由\n\n##### 热切换配置使用（config/dynamic/）\n在 .env 中设置 ENABLE_HOT_SWITCHING=true 后，会在   AppServiceProvider 进行 dynamic 映射（对性能有一定影响，慎用）\n\n使用方式:\n```php\n\u003c?php\n$env = config('dynamic.env');\n```\ndynamic 目录文件说明\n -  production 生产环境 (必须配置)\n -  develop 开发环境 (必须配置，以下配置继承 develop 配置)\n    -  test 测试环境\n    -  local 本地环境\n    -  simulation 仿真环境\n    \nTips：\n  \n1. .env 配置 DYNAMIC_IS_STRICT 控制热配是否严格模式（默认 false 关闭）\n    - 严格模式下不会继承 production/develop，完全采用当前环境配置\n2. 默认在继承基础上有重复属性，会覆盖继承项 \n3. 继承基础特有属性会被携带至当前配置 \n4. config/dynamic.php 为 IDEA 提示文件，使用空 key 即可\n\n优化默认路由中闭包\n- 路由中禁止使用闭包，如有需要请在 ClosureController 中注册\n\n##### 缓存清理\n- php artisan optimize:clear     // (慎用）\n    - php artisan view:clear\n    - php artisan cache:clear    // 应用程序缓存清理(慎用- 会清理 config.cache 中启用缓存(file/db/redis 等))\n    - php artisan route:cache\n    - php artisan config:clear\n    - php artisan clear-compiled    // 清理编译\n php artisan debug:clear\n\n##### 本地服务开启\n```php\nphp artisan serve\n```\n\n##### 数据库迁移\n设置数据工厂填充中文配置\n```php\nuse Faker\\Factory as Factory;\n\n$  $faker = Factory::create('zh_CN');\n```\n\n##### 多进程使用\n通过 MainProcess 控制 ChildProcess 进程（仅能在 CLI 模式下运行）\n\n定时执行在 Console/Kernel.php 中 schedule 配置\n\n运行流程\n```php\nMainProcess(主进程调度) =\u003e MainProcessController（主进程执行任务，拆分子进程） =\u003e \nChildProcess（子进程调度） =\u003e ChildProcessController （子进程任务） =\u003e\n  MainProcessController（接收子进程） =\u003e MainProcess（主进程结束）\n```\n业务任务名\n\n$this-\u003ebusiness_name \n\n主进程业务逻辑和数据请求\n```php\n（new \\App\\Http\\Controllers\\{$this-\u003ebusiness_name}Action())-\u003egetData();\n\n（new \\App\\Http\\Controllers\\{$this-\u003ebusiness_name}Action())-\u003erun();\n```\n\n子进程运行业务逻辑\n```php\n(new \\App\\Http\\Controllers\\{$this-\u003ebusiness_name}ProcessAction()-\u003erun();\n``` \n## 测试驱动开发（TDD）\nphpunit\n\n\n\ndusk 浏览器测试\n```php\ncomposer require laravel/dusk --dev\nphp artisan dusk:install  // 需要翻墙\n```\n\n\n [chromedriver 镜像](http://npm.taobao.org/mirrors/chromedriver/) 下载对应 Chrome 版本资源\n手动重命名移动至 LaravelPlus/vendor/laravel/dusk/bin/chromedriver-mac\n\n\n\n## 性能优化（只建议生产环境使用）\n- php artisan optimize // 类映射加载优化（该命令会自动缓存 config/route）\n    - php artisan config:cache  // 配置缓存\n    - php artisan route:cache   // 路由\n- php artisan view:cache  // 视图缓存\n- composer dump-autoload --optimize //\n- 开启 OpCache\n    ```php\n    $ sudo vim /etc/php/7.2/fpm/php.ini\n    // set opcache.enable=1\n    // ...\n    $ sudo service php5.6-fpm restart\n    $ sudo service nginx restart\n    ```\n\n\n## 前端处理\n##### 资源构建\n\n ```php\nnpm run dev    // 本地开发,开启 debug 模式\nnpm run prod    // 线上部署（进行压缩资源）\n\nnpm run watch   // 监视编译（开发时启用）\n```\n##### 模板使用\n使用 mixin 注入 vue 组件\n```html\n\u003cscript\u003e\n    var js_data = @json($js_data);\n    var mixin = {\n        data: {\n        },\n        methods: {\n        }\n    }\n\u003c/script\u003e\n\u003cscript type=\"text/javascript\" src=\"{{asset('js/app.js')}}\"\u003e\u003c/script\u003e\n```\n##### 路由 web/api 使用区别和场景\nweb 经过权限，csrf 等中间件和 Session\napi token 维护使用 auth:api 中间件或 [barryvdh/laravel-cors](https://github.com/barryvdh/laravel-cors)\n若非单纯 api ，建议使用 web\n\n\u003chr /\u003e\n\n### [改动内容](https://github.com/ElapseAnnals/LaravelPlus/wiki/3.-%E6%94%B9%E5%8A%A8%E5%86%85%E5%AE%B9)\n- 设置日志打印默认按天执行（.env::LOG_CHANNEL）\n- 增加默认加载软件包\n    - production  生产环境\n      \n        - [overtrue/laravel-lang](https://github.com/overtrue/laravel-lang) 多语言本地化 i18n\n       \n        - [maatwebsite/excel](https://github.com/Maatwebsite/Laravel-Excel) 增加 excel 组件\n    \n    - develop     开发环境\n      - [reliese/laravel](https://github.com/reliese/laravel)         模型生成工具 / phptool/laravel\n      ```php\n        php artisan code:models --table=tb_name   // 指定表 \n        php artisan code:models --connection=mysql  // 指定数据库连接\n        php artisan code:models --connection=mysql --table=tb_name   // 指定连接和指定表\n      ```\n      - [barryvdh/laravel-debugbar](https://github.com/barryvdh/laravel-debugbar)   debuger 工具\n      - [barryvdh/laravel-ide-helper](https://github.com/barryvdh/laravel-ide-helper)   ide 辅助工具   \n            ```php artisan ide-helper:generate``` \n      - [overtrue/laravel-query-logger](https://github.com/overtrue/laravel-query-logger)       日志工具\n      - [nunomaduro/phpinsights](https://github.com/nunomaduro/phpinsights)          统计检测项目问题（类似 PHPCS,需求版本 php 7.2.* ，请手动安装 composer require nunomaduro/phpinsights --dev）\n     \n      \n  \n  - 推荐软件包列表\n  \n      - [laravel/socialite] () 社会化登陆包【注意配置代理或更改底层路由请求】\n                     - 替代方案  [overtrue/socialite](https://github.com/overtrue/socialite) 包含国内社会化登陆\n      \n      - [rap2hpoutre/laravel-log-viewer](https://github.com/rap2hpoutre/laravel-log-viewer) 日志展示 [访问 host/logs]         \n      - [respect/validation](https://github.com/Respect/Validation) 验证包   \n      \n       - [react/react](https://github.com/reactphp/react) ReactPHP 多进程异步扩展（手动,引入后 Process 才可使用）\n                  - react/child-process\n                  - react/event-loop\n              - 引入 ElasticSearch For scout\n                  - [laravel/scout](https://github.com/laravel/scout) (手动)\n                  - [tamayo/laravel-scout-elastic](https://github.com/ErickTamayo/laravel-scout-elastic)(手动)\n                  \n        - [elastic/elasticsearch-php](https://github.com/elastic/elasticsearch-php) 原生 ElasticSearch (手动)\n              - rabbitMQ 扩展\n                  - vladimir-yuldashev/laravel-queue-rabbitmq         \n                  - php-amqplib/php-amqplib 原生(手动)\n              \n         - [predis/predis](https://github.com/nrk/predis) Redis 插件（建议使用 php-redis 扩展）\n          \n         - [php-tool/laravel-plus-make](https://github.com/PHPTool/LaravelPlusMake) Laravel Plus Make 自动生成 framework 代码插件软件包(手动)    \n    \n         - [infyomlabs/laravel-generator](https://github.com/InfyOmLabs/laravel-generator)     Code 代码生成工具（可选）\n       - [darkaonline/l5-swagger]() swagger 文档生成\n       - [mpociot/laravel-apidoc-generator]() api doc 文档生成                  \n       - [nunomaduro/larastan]() 增加 laravel 静态检测工具     \n\n       - [guzzlehttp/guzzle]() Http 请求包\n             \n       - [ClassPreloader/ClassPreloader]() vendor preload 生成器       \n             \n                     \n-  增加前端资源\n    - element-ui 样式框架（可选方案 iview）\n   \n - 增加默认图片存储目录（storage/app/public/images)\n \n - 扩展结构分层 [想法来源](https://learnku.com/articles/19452?order_by=created_at\u0026)\n    - 系统分层\n        - Controllers 控制器层\n    - 主要分层\n        - Services 业务服务层（处理业务逻辑）\n        - Repositories Repository 数据仓库层（处理数据库逻辑）\n        - Models 模型层（无需创建，默认通过模型工具创建）\n    - 扩展分层\n        - Presenters 固定业务主持中控层(处理视图的逻辑：[参考](https://blog.csdn.net/markely/article/details/53000968),更适用于 blade)\n            - 减少在 blade 用 @if...@else...@endif \n        - Transformers 转化层/筛选层（筛选后在选择输出）\n        - Formatters 格式化层（对于输出数据进行格式化，服务于 view 层），便于前端模版展示\n- 增加 redis 多语言配置读取\n- 设置默认 Schema index 长度\n\n    使用 Schema 注意 MySQL 版本低于 5.7.7 需设置默认 index 长度小于 191\n  ```php\n  Schema::defaultStringLength(191);\n  ```\n\n## 进展\n- 开发 SwiftCMS 实际应用以进行完善\n\n## 待办列表\n\n[Projects](https://github.com/ElapseAnnals/LaravelPlus/projects)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felapse-annals%2Fswift-cms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Felapse-annals%2Fswift-cms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felapse-annals%2Fswift-cms/lists"}