- 步骤
- 初始化
composer create-project laravel/laravel blog57 --prefer-dist
npm install
安装前端资源vendor/bin/phpunit
配置测试composer test
执行测试命令
- 建表及模型
make:model -m
表结构及模型make:factory PostFactory
模型工厂文件make:seeder PostsTableSeeder
填充类文件- 清理表数据
- 使用工厂方法填充指定条目
DatabaseSeeder
进行填充调用
php artisan db:seed
填充初始化数据
- 建路由及控制器
- web.php 路由
- make:controller 生成控制器
- 模板指令与布局
- tinker工具创建后台用户
php artisan tinker
通过该命令行与应用进行交互,而非直接操作数据库
- 前端美化
- 引入 DataTables 和 FontAwesome
npm install datatables.net-bs4 --save-dev
@import "~datatables.net-bs4/css/dataTables.bootstrap4"
引入CSS库
- 引入 DataTables 和 FontAwesome
- 文件上传
- 配置本地文件系统
php artisan storage:link
- 在根目录下的 public 目录中创建一个软链 storage 指向 storage/app/public 目录
- 创建辅助函数文件
"files": ["app/helpers.php"]
配置自动加载composer dumpauto
确保在命名空间下新建的类文件,被加入到自动加载文件
- 创建文件上传管理服务(一段通常的商业逻辑代码)
- 检测文件MIME类型
composer search mime -t package
检索包
- 创建管理
- 请求验证类
- 检测文件MIME类型
- 配置本地文件系统
- 修改数据表列
composer require doctrine/dbal
- 前端美化
- 常用组件
- Selectize.js 下拉框UI
- Pickadate.js 日期
- Laravel Mix 管理前端资源
- 资源编译,合并,复制转移
- mix.js().sass() 资源编译到指定目录
- mix.combine([],dist) 资源文件合并
- mix.copy() 资源文件复制
- Clean Blog
- 免费博客模板,美化博客前端页面
npm install startbootstrap-clean-blog --save-dev
- 支持tooltip
- 免费博客模板,美化博客前端页面
- 常用组件
- 表单请求类
- 职责单一性
- 检查两个方面
- 请求者是否有发送此顶请求的权限
- 检查请求的内容是否合规
- 模型
- 设置器与获取器
getPublishDateAttribute, setPublishDateAttribute
- 服务与控制器
- 瘦控制器,肥模型
- 参数在前,类型注入在后
- 设置器与获取器
- 邮件队列
- 邮件发送流程
- 配置帐号密码,邮件服务器及端口,加密方式
- 邮件内容构建,实现build方法构建
- 使用tinker测试邮件发送,控制器内用Mail::to发
- 发送方式
send(new ContactMail($data))
同步发送queue(new ContactMail($data))
异步推送到队列任务
- 发送方式
- 关键:邮件内容的生成,Mail门面负责管理邮件发送,QQ使用465端口
- 队列原理(两个进程,生产者/消费者)
- 前台web请求负责将附件推送到队列
- 队列任务在后台异步执行
- 驱动
- 对接口方法的实现
- 用法
- 修改队列配置,修改任务的推送方式(默认为同步)
QUEUE_CONNECTION
将队列的同步默认值,配置为指定的连接类型,比如database- 建立相应的数据表并迁移
php artisan queue:table
php artisan migrate
php artisan queue:work
执行队列(需手动登录到服务器)
- 队列系统解决方案
Laravel Horizon
队列的查看管理- 自动处理队列
- Supervisor 用 Supervisor 来管理 queue:listen 进程
- 调度任务(小任务)
- 书写laravel任务调度命令
- 在kernel内使用
Schedule
类实例,关联queue:work
命令
- 在kernel内使用
- 通常与linux服务器cronta调度命令结合,有点计划任务的味道
- 流程
- 借助服务器crontab调度 驱动–> laravel任务调度
* * * * * php /path/to/artisan schedule:run 1>> /dev/null 2>&1
php artisan schedule:run
- 书写laravel任务调度命令
- 原理
- 成为守护进程一部分,后台执行
- 邮件发送流程
- 初始化
实用功能实现思路
- 垃圾评论解决方案
- 验证码,黑白名单
- 使用第三方评论系统
- 分享方案
- 借助第三方分享代码工具
- 通过share.js来实现
- Rss订阅
- 使用
suin/php-rss-writer
生成Rss文件,依据RSS规范channel,item,rss - 创建通用逻辑RSS订阅服务
- 临时性的内容使用缓存接口
- 使用
- 生成站点地图
- SiteMap 服务 规范url,日期
- 生成xml文件内容,使用缓存门面
- cache使用流程
- has获取缓存
- 无缓存则生成缓存,并返回生成内容
笔记
- httpOnly作用
- 如果cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息
- 419错误与中间件csrf验证有关
- 用户退出流程
- 退出guard
- 使用session无效
- 重定向到指定页面
- 页面不合理布局也会导致操作失败
- 服务
- laravel中所谓的创建服务,通常就是将一段公用的逻辑代码,或称之为领域代码封装出去
- 框架的服务提供者依据功能可分为:引导服务,管理服务,基础服务
static::call
在类方法体内使用,延迟静态绑定,它将使用的是运行时绑定调用类
redis
- 工作模式:单进程,阻塞性;而memercache是多进程
- 集合(set唯一性),字符串,字典hash,list(可进行切片操作)
- 应用场景
- 缓存,内存数据库
- 消息代理,订阅发布(生产环境通常用专门MQ消息队列)
- 不适合存储大尺寸对象存储 100kb以上的
- redis 计数器应用场景
- 频率控制:接口防刷,密码尝试次数限制
- 数量统计:请求量统计
- 数量控制:商品控制,奖励额度控制
- 相关基本命令
- 时限,计数操作,键读取判断
- exists 判断key是否存在
- set,get 存取
- setnx key 存在则存值失败
- incr, incrby -/+ 2 增加
- expire mycounter 30 设置键的生存时间
- ttl mycounter 查看键的生存时间
php7新特性
- ?? NULL合并操作符
- 从左往右第一个存在且不为 NULL 的操作数。
- 如果都没有定义且不为 NULL,则返回 NULL。PHP7开始提供