Laravel

分类下相关文章

laravel 项目安装 https 证书失败:The client lacks sufficient authorization :: Invalid response from

用旧的方法给 Laravel 项目安装 certbot https 证书报错: sudo certbot --nginx Failed authorization procedure. xxx.sunzhongwei.com (http-01): urn:ietf:params:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://xxx.sunzhongwei.com/.well-known/acme-challenge/xxx " ...

阅读全文...

Laravel 6.0 版本新功能介绍

终于等到 Laravel 6.0 发布 (将于19年9月3号发布),Laravel 6.0 是一个 LTS 版本 , 所以有必要认真看一下新功能有哪些。 LTS(Long-term Support)长期支持 Laravel 上一个 LTS 版本是 5.5。LTS 版本,例如 Laravel 6.0, 将提供两年的 bug 修复和三年的安全漏洞修复。 看了一下官方 release notes 的介绍,https://laravel.com/docs/6.0/releases,主要更新有这几个: PHP 7.2 Laravel 6.0 需要 php 7.2 或更高版本。 使用语义化版本号 La ...

阅读全文...

Laravel 队列的 bug: Out of range value for column 'attempts'

早上查看 laravel 任务队列的运行状况时,发现剩余一条 job,一直没有处理完。 然后,查看日志,发现在不断报错: Numeric value out of range: 1264 Out of range value for column 'attempts' at row 1 (SQL: update jobs set reserved_at = xx, attempts = 256 wh ere id = xx) 感觉是 attempts 字段类型问题,于是查看了一些 jobs 表的建表语句 | jobs | CREATE TABLE `jobs` ( `id` bigi ...

阅读全文...

laravel validation rule 限制角色数量

我想限制后台登陆账号所拥有的角色数量。例如,一个人最多只能有一种角色。 可以使用 array between 规则来校验。 public function rules() { return [ 'password' => 'confirmed', 'roles' => 'array|between:0,1', ]; } public function messages() { return [ 'password.confirmed' => '请确认密码一致', 'between' =& ...

阅读全文...

监听 Laravel Model 生命周期中的 create delete 事件

现实场景 一个论坛系统,当后台管理人员进行删帖,需要对用户的发帖量进行重新计算。 所以,需要能监听 Model 的删除事件。 三种实现方法。后面两种为官方推荐的方法,然而我更喜欢第一种。。。 方法一 优点:简单粗暴 缺点:可读性不好。当你没看过 AppServiceProvider,并不知道还有这个触发的逻辑。 app/Providers/AppServiceProvider.php public function boot() { Post::deleted(function($post){ $user_id = $post->user_id; ...

阅读全文...

laravel 文章编辑页 token 失效问题

有的页面需要长时间编辑,例如超过2个小时,这种情况下一旦出现因 token 失效而保存失败,用户体验会非常差。 所以,需要针对性的延长失效时间。 laravel csrf token 失效问题 修改: config/session.php 将 // 两小时 'lifetime' => 120 调整为 // 六小时 'lifetime' => 360 七牛 upload token 失效问题 将默认的一小时,调整为 24 小时。 return response()->json(['uptoken' => QiniuStorage::disk('qiniu')- ...

阅读全文...

Laravel whereIn 的排序问题

场景 由于浏览历史记录表数据量巨大,所以不敢用这个表进行联表操作。 在帖子浏览记录接口逻辑中,先获取了最近的浏览帖子的 ID 集合,然后使用 where in 操作获取具体的帖子信息。 $saves = VisitHistory::where('user_id', $user->id) ->orderBy('id', 'desc') ->offset($offset) ->limit($limit) ->get(); $items = Post::with('user:id,name,is_master,avatar_url') ...

阅读全文...

消息通知提醒 laravel notification

参考 https://laravel.com/docs/5.5/notifications 创建提醒 php artisan make:notification InvoicePaid app/Notifications 目录下会新增一个对应的 class 场景 关注的人有发新帖子 自己的帖子有人回复 自己的回复有人回复 单独发送消息 VS 群发消息 给指定用户发送 $user->notify(new InvoicePaid($invoice)); 群发消息 Notification::send($users, new InvoicePaid($invoice)); 通知的方式 ...

阅读全文...

Laravel Excel 导出的 Excel 文件无法打开

版本:maatwebsite/excel 2.1 导出的 Excel 文件,无法打开,报错信息: 使用 vimdiff 对比了一下其他项目可以打开的 Excel 和无法打开的 Excel 文件格式。 发现无法打开的 Excel 有一个共同点,文件首行是个空白行。删除空白行之后,Excel 就能正常打开了。 同时,在 Github 该项目的 issue 列表里找到了同样的问题: https://github.com/Maatwebsite/Laravel-Excel/issues/202 解决方案是,在 Excel::create 之前加上两行 ob_end_clean(); ob_start ...

阅读全文...

laravel route api.php 与 web.php 的区别

如果是一个纯粹的网站项目,只需要使用 web.php 里的路由就可以了。ajax 需要使用到的 route 也是定义在 web.php 中。 如果是一个非网页项目,例如微信小程序,Android / iOS APP 项目,或者给三方开发者提供接口,则应该使用 api.php。因为 cookie 那一套并不适用。 Web 路由使用了 web middlewareGroups 。包含类似 Session 及 CSRF 保护,而网页 ajax 同意需要 CSRF 保护。 API 路由使用了 api middlewareGroups 参考 app/Http/Kernel.php protected ...

阅读全文...

office 已检测到文件存在问题,编辑此文件可能存在风险

在使用 Maatwebsite/Laravel-Excel 将后台用户数据导出到 Excel 中时,遇到一个诡异的问题。 部分用户的微信昵称在 Excel 中不显示,Excel 版本为 2019。 同时,Excel 的顶部还出现一条风险提示: office已检测到文件存在问题 编辑此文件可能存在风险 经同事测试,发现当微信昵称中存在 emoji 表情时,就能百分比重现此问题。看来是 Excel 把 emoji 当成了非法字符。 所以解决方案就是把昵称中的 emoji 过滤掉,然后导出到 Excel。 实现方法参考这里 https://stackoverflow.com/questions/ ...

阅读全文...

Laravel 生成指定位数的邀请码

需求场景 为注册会员生成独有的邀请码,每个会员一个,不能重复。为了方便传播,邀请码的位数暂定为 5 位,由数字和大写字母组成。 为了防止邀请码重复冲突,我在会员表的邀请码字段上加了个唯一索引。 但是,邀请码是在微信支付成功的回调逻辑里触发的,5位的邀请码,还是存在冲突的可能,可以加了个不断重试的机制。 实现代码 /** * 生成邀请码 */ public function gen_invite_code() { $chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; $res = ""; ...

阅读全文...

Laravel 5.8 版本的新功能及更改

2019 年 2 月 26 日,Laravel 新版本 5.8 发布。粗略地扫了一遍新功能列表,感觉没有任何尝试的必要,根本没有升级的冲动。都是不痛不痒的小功能更新。只不过有些修改确实无法向下兼容 5.7 版本,例如 TTL 的单位问题,所以不得不发了 5.8 版本,我觉得是这样。 Laravel 5.8 要求 PHP 版本 >= 7.1.3。 一些新功能: 集成了 PHP dotenv 3.0 随之而来的新特性使 .env 的配置更加灵活: 支持了多行变量。例如 LOCATION="烟台 开发区" 不再对配置字符串进行 trim 操作。 可配置从一堆路径中查找 . ...

阅读全文...

findOrFail / firstOrFail 规避搜索引擎爬虫抓取已删除数据时报错

早上看到几个 Laravel 的网站项目报同一个错误 ERROR: Creating default object from empty value {"userId":5,"exception":"[object] (ErrorException(code: 0): Creating default object from empty value at app/Http/Controllers/ProductController.php:15) 从 Nginx 日志看,错误是因为搜素引擎的爬虫,抓取了一个不存在的商品链接,例如 https: ...

阅读全文...

Laravel 使用 chunkById 遍历大表

问题 现在需要定期遍历物流快递表,以更新物流的状态。但是,这个表在线上生产环境可能非常大,一次性取出来遍历可能爆掉服务器内存。 而使用 chunk 方法,会出现漏掉一半数据未处理的情况: 例如,有 A B C D E 五个物流快递单,每次 chunk 取出两条数据。 第一次取出 A B, 处理完之后,A B 标记为已处理 第二次取时,由于 A B 标记为已处理,在取第二页时,直接跳过了 C D,直接取出了 E。 C D 就被漏掉了 使用 chunkById Laravel 5.5 文档中,并没有说明有 chunkById  这个方法;而 Laravel 5.7 中有专门的说明: If ...

阅读全文...

近期节日

2019年09月20日 国际爱牙日
2019年09月21日 国际和平日
2019年09月22日 世界无车日
2019年09月23日 秋分
2019年09月23日 国际聋人节
2019年09月27日 世界旅游日
2019年10月01日 国庆节
2019年10月04日 世界动物日
2019年10月07日 重阳节
2019年10月08日 寒露
2019年10月09日 世界邮政日
2019年10月10日 辛亥革命纪念日
查看更多节日