[开源] LaravelPlus - 基于 Laravel 魔改,为方便实际业务使用 - 开发中
目的
为了减少重复 CURD 和新项目的配置麻烦等问题,(就是为了骗星星:LaravelPlus )
如:
- 现有的 infyomlabs/laravel-generator CODE 生成工具虽然好用,但是不太喜欢样式和代码结构。
- 有些本地,测试,线上的配置需要频繁改动的需要。
- 多个项目构建引入包,配置扩展等重复性操作
介绍
LaravelPlus 基于 Laravel 增加部分软件包初始安装和进行业务使用功能改动,来创建一个开箱即用的应用
版本基础
当前版本基于
| PHP | Laravel (影响不大,降低版本理论可以) |
|---|---|
| >=7.1.3 | >=5.8 |
项目使用说明
下载项目
// 1. github (推荐)
$ git clone https://github.com/ElapseAnnals/LaravelPlus.git
$ git checkout v5.8.0 // 切换至当前最新稳定版本
// 或
// 2. composer
$ composer create-project elapse-annals/laravel-plus
$ mv laravel-plus LaravelPlus
复制项目
// 1.在当前目录运行自动复制脚本 (推荐)
$ php LaravelPlus/create YourProject
// 或
// 2.在当前目录手动复制项目至自身项目
$ cd LaravelPlus
$ rm composer.lock
$ rsync -av --exclude . --exclude .. --exclude .git/ --exclude vendor/ --exclude .github/ LaravelPlus/* YourProject
// 为消除对称 */
$ cd YourProject
$ rm composer.lock .env .travis
$ cp .env.example .env
初始化
$ cd YourProject // 进入 YourProject 项目中
$ composer install // 更新软件包 (请先已安装 composer )
$ php artisan key:generate // 更新 key
$ php artisan vendor:publish // 发布扩展包的资源
$ php artisan migrate // 迁移
$ php artisan storage:link // 图片资源软连接映射【非必须】
Tips:
- 兼容 laravel-plus 目录名
功能使用说明
创建 framework 分层脚本和资源映射:想法来源
framework 脚本创建内容:
- Controller, Service, Repository 等文件和对应关联关系
- Route 资源路由增加
- Controller 中资源类型代码和模型数据处理(开发中)
直接使用本项目内容(推荐)
$ php artisan make:framework Test // 创建分层结构(推荐)
$ php artisan make:framework Test --basis // 创建系统分层和主要分层结构(Controller, Service, Repository)
$ php artisan make:framework Test --D // 删除分层结构
或引入 php-tool/laravel-plus-make Laravel Plus Make 插件软件包(更新进度略慢本项目)
$ composer require php-tool/laravel-plus-make
热切换配置使用(config/dynamic/)
在 .env 中设置 ENABLE_HOT_SWITCHING=true 后,会在 AppServiceProvider 进行 dynamic 映射(对性能有一定影响,慎用)
使用方式:
<?php
$env = config('dynamic.env');
dynamic 目录文件说明
- production 生产环境 (必须配置)
- develop 开发环境 (必须配置,以下配置继承 develop 配置)
- test 测试环境
- local 本地环境
- simulation 仿真环境
Tips:
- .env 配置 DYNAMIC_IS_STRICT 控制热配是否严格模式(默认 false 关闭)
- 严格模式下不会继承 production/develop,完全采用当前环境配置
- 默认在继承基础上有重复属性,会覆盖继承项
- 继承基础特有属性会被携带至当前配置
- config/dynamic.php 为 IDEA 提示文件,使用空 key 即可
优化默认路由中闭包
- 路由中禁止使用闭包,如有需要请在 ClosureController 中注册
缓存清理
- php artisan optimize:clear // (慎用)
- php artisan view:clear
- php artisan cache:clear // 应用程序缓存清理 (慎用 - 会清理 config.cache 中启用缓存 (file/db/redis 等))
- php artisan route:cache
- php artisan config:clear
- php artisan clear-compiled // 清理编译
php artisan debug:clear
性能优化(只建议生产环境使用)
- php artisan optimize // 类映射加载优化(该命令会自动缓存 config/route)
- php artisan config:cache // 配置缓存
- php artisan route:cache // 路由
- php artisan view:cache // 视图缓存
- composer dump-autoload --optimize //
- 开启 OpCache
$ sudo vim /etc/php/7.2/fpm/php.ini
// set opcache.enable=1
// ...
$ sudo service php5.6-fpm restart
$ sudo service nginx restart
前端样式构建
$ npm run dev // 本地开发,开启 debug 模式
$ npm run prod // 线上部署(进行压缩资源)
$ npm run watch // 监视编译(开发时建议启用)
改动内容
- 设置日志打印默认按天执行(.env::LOG_CHANNEL)
增加默认加载软件包
- production 生产环境
- respect/validation 验证包
- react/react ReactPHP 多进程异步扩展(可以移除)
- 引入 ElasticSearch For scout
- laravel/scout
- tamayo/laravel-scout-elastic
- elastic/elasticsearch-php 原生 ElasticSearch (可选)
- rabbitMQ 扩展
- vladimir-yuldashev/laravel-queue-rabbitmq - php-amqplib/php-amqplib 原生(可选)
- rap2hpoutre/laravel-log-viewer 日志展示 [访问 host/logs]
- predis/predis Redis 插件(建议使用 php-redis 扩展)
- php-tool/laravel-plus-make Laravel Plus Make 自动生成 framework 代码插件软件包(可单独引用)
- guzzlehttp/guzzle Http 请求包
- overtrue/laravel-lang 多语言本地化 i18n
- develop 开发环境
- reliese/laravel 模型生成工具
$ php artisan code:models --table=tb_name - [doctrine/dbal]
- barryvdh/laravel-debugbar debuger 工具
- barryvdh/laravel-ide-helper ide 辅助工具
$ artisan ide-helper:generate - overtrue/laravel-query-logger 日志工具
- nunomaduro/phpinsights 统计检测项目问题(类似 PHPCS, 需求版本 php 7.2.* ,请手动安装 composer require nunomaduro/phpinsights --dev)
- infyomlabs/laravel-generator Code 代码生成工具(可选)
- reliese/laravel 模型生成工具
- production 生产环境
增加前端资源
- element-ui 样式框架(可选方案 iview)
增加默认图片存储目录(storage/app/public/images)
- 扩展结构分层 想法来源
- 系统分层
- Controllers 控制器层
- 主要分层
- Services 业务服务层
- Repositories Repository 数据仓库层
- Models 模型层(无需创建,默认通过模型工具创建)
- 扩展分层
- Presenters 固定业务主持中控层
- Transformers 转化层 / 筛选层(筛选后在选择输出)
- Formatters 格式化层(对于输出数据进行格式化,服务于 view 层),便于前端模版渲染与展示
- 系统分层
- 增加 Redis 多语言配置读取
待办
完善资源功能:Controller 中模型数据处理和数据返回
增加 Redis 多语言数据库,和迁移
增加动态视图模式和静态视图模式(渲染后生成 view)切换
完善 wiki
[开源] LaravelPlus - 基于 Laravel 魔改,为方便实际业务使用 - 开发中的更多相关文章
- ThinkSNS+ 基于 Laravel master 分支,从 1 到 0,再到 0.1
什么是 ThinkSNS+ 09 年,由北京的团队开发了 ThinkSNS 涉足社交开源行业.这么多年累计不少客户.2014-2016,两年都在维护和开发之前基于 TP 的 ThinkSNS , 慢慢 ...
- 魔改了一下bootstrap-treeview组件,发布个NPM包体验一下
前言 之前在这篇文章 基于.NetCore开发博客项目 StarBlog - (8) 分类层级结构展示 中说到,我为了让文章分类列表支持层级结构,用了一个树形组件,不过这个组件太老了,使用的Boots ...
- 魔改——MDI多视图模板Tab/标签页 初始化/操作控件
==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...
- 魔改——MFC SDI程序 转换为 MDI程序
==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...
- 魔改——MFC MDI程序 定制 文档模板 运行时全部打开 禁用关闭按钮
==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...
- 基于 Laravel、Vue.js开发的全新社交系统----ThinkSNS+
什么是ThinkSNS+ ThinkSNS(简称TS)始于2008年,一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+.新的产品名 ...
- 【社交系统ThinkSNS+研发日记三】基于 Laravel Route 的 ThinkSNS+ Component
[社交系统ThinkSNS+研发日记系列] 一.<ThinkSNS+ 基于 Laravel master 分支,从 1 到 0,再到 0.1> 二.<基于 Laravel 开发 Th ...
- 基于 Laravel 开发 ThinkSNS+ 中前端的抉择(webpack/Vue)踩坑日记【ThinkSNS+研发日记系列】
在上一篇文章< ThinkSNS+基于Laravel master分支,从1到 0,再到0.1>,简单的介绍了 社群系统ThinkSNS+ ,这里分享在开发过程中,前端选择的心理活动. L ...
- 基于 Laravel Route 的 ThinkSNS+ Component
这里是传送门: <ThinkSNS+ 基于 Laravel master 分支,从 1 到 0,再到 0.1[ThinkSNS+研发日记系列一]> <基于 Laravel 开发 Th ...
随机推荐
- CF883H
CF883H 题意: 给你一个字符串,需要把它以最小的划分次数划分为x个长度相等的回文串,可以重新排列. 解法: 大模拟一个. 分别统计出现一次的字符和出现两次的字符,如果没有出现一次的字符,那么所有 ...
- Spring+shiro session与线程池的坑
在java web编程中,经常使用shiro来管理session,也确实好用 shiro来获取session的方式 SecurityUtils.getSubject().getSession() 其中 ...
- Dubbo 节点telnet测试
Dubbo 节点telnet测试 本地安装telnet客户端 Telnet 服务地址 端口 如telnet 127.0.0.1 1234 出现此对话框表示连接成功 输入status –l 会显 ...
- Leetcode题目198.打家劫舍(动态规划-简单)
题目描述: 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警. 给 ...
- echart itemStyle属性设置
itemStyle // itemStyle 设置饼状图扇形区域样式 itemStyle: { // emphasis:英文意思是 强调;着重; ...
- Qt VS MFC
最近用了一段时间Qt,觉得网上这篇文章讲述Qt与MFC之间的区别很到位,分享一下. ----------------------------------原文---------------------- ...
- 2.基于AOP自定义注解Annotation的实现
上一篇中分析了AOP的实现原理, 总结为: 判断对象是否需要被代理?@Aspect注解的实现是根据切入点表达式 代理之后需要做什么,就是那些通知,本质上是实现了MethodInterceptor的拦截 ...
- 前端需要掌握的Babel知识
Babel 是怎么工作的 Babel 是一个 JavaScript 编译器. 做与不做 注意很重要的一点就是,Babel 只是转译新标准引入的语法,比如: 箭头函数 let / const 解构 哪些 ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_3-1.整合Mybatis访问数据库和阿里巴巴数据源
笔记 1.整合Mybatis访问数据库和阿里巴巴数据源 简介:整合mysql 加入mybatis依赖,和加入alibaba druid数据源 1.加入依赖(可以用 http://start.s ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_6-06 zuul微服务网关集群搭建
笔记 6.Zuul微服务网关集群搭建 简介:微服务网关Zull集群搭建 1.nginx+lvs+keepalive https://www.cnblogs.com/liuyisai/ ...