# laravel-blog-code **Repository Path**: pardon110/laravel-blog-code ## Basic Information - **Project Name**: laravel-blog-code - **Description**: 采用laravel5.7 版本的laravel学院的博客教程,授权令牌 - **Primary Language**: PHP - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 3 - **Created**: 2019-03-15 - **Last Updated**: 2024-11-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # laravel5.7 系列 ## blog57 - 流程 - 初始化 - `composer create-project laravel/laravel blog57 --prefer-dist` - `npm install` 安装前端资源 - `vendor/bin/phpunit` 配置测试 - `composer test` 执行测试命令 - 建表及模型 - `make:model -m` 表结构及模型 - `make:factory PostFactory` 模型工厂文件 - `make:seeder PostsTableSeeder` 填充类文件 1. 清理表数据 2. 使用工厂方法填充指定条目 3. `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库 - 文件上传 - 配置本地文件系统 1. `php artisan storage:link` - 在根目录下的 public 目录中创建一个软链 storage 指向 storage/app/public 目录 2. 创建辅助函数文件 - `"files": ["app/helpers.php"]` 配置自动加载 - `composer dumpauto` 确保在命名空间下新建的类文件,被加入到自动加载文件 3. 创建文件上传管理服务(一段通常的商业逻辑代码) - 检测文件MIME类型 - `composer search mime -t package` 检索包 - 创建管理 - 请求验证类 - 修改数据表列 - `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 进程 - 调度任务(小任务) 1. 书写laravel任务调度命令 - **在kernel内使用`Schedule`类实例,关联`queue:work`命令** 2. 通常与linux服务器cronta调度命令结合,有点计划任务的味道 3. 流程 - 借助服务器crontab调度 驱动--> laravel任务调度 - `* * * * * php /path/to/artisan schedule:run 1>> /dev/null 2>&1` - `php artisan schedule:run` - 原理 - 成为守护进程一部分,后台执行 - 实用功能解析 - 垃圾评论解决方案 - 验证码,黑白名单 - 使用第三方评论系统 - 分享方案 - 借助第三方分享代码工具 - 通过share.js来实现 - Rss订阅 - 使用`suin/php-rss-writer`生成Rss文件,依据RSS规范channel,item,rss - 创建通用逻辑RSS订阅服务 - 临时性的内容使用缓存接口 - 生成站点地图 - SiteMap 服务 规范url,日期 - 生成xml文件内容,使用缓存门面 - cache使用流程 1. has获取缓存 2. 无缓存则生成缓存,并返回生成内容 - Note - httpOnl作用 - 如果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 查看键的生存时间 - python - python中对象的创建与初始化是两回事,以类与对象的思想来组织数据 - **?? NULL合并操作符** - 从左往右第一个存在且不为 NULL 的操作数。 - **如果都没有定义且不为 NULL,则返回 NULL。PHP7开始提供** ## OAuth授权