Laravel

分类下相关文章

Laravel 获取上传图片文件的后缀

我之前都是不关注上传图片的文件名后缀的,直接放到七牛云存储上。 但是正在做的海外站点开启了 Cloudflare CDN 加速,可以免费的进行图片等资源文件的缓存。 而 Cloudflare 是根据文件名后缀来判断该文件是否应该进行缓存的,所以如果不加上图片文件名的后缀,Cloudflare 默认认为是不需要换成的,就会回源到原服务器。这样就起不到 CDN 加速的效果了。 所以,统一在存储上传图片的时候,加上了图片文件名后缀。 $file = $request->file('file'); // website_logo.png $extension = $fil ...

阅读全文...

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: ...

阅读全文...

近期节日

2019年11月20日 国际儿童日
2019年11月21日 世界问候日
2019年11月22日 小雪
2019年11月22日 感恩节
2019年11月29日 黑色星期五
2019年12月01日 世界艾滋病日
2019年12月03日 国际残疾人日
2019年12月07日 大雪
2019年12月09日 "一二九"运动纪念日
2019年12月09日 世界足球日
2019年12月10日 世界人权日
2019年12月12日 西安事变纪念日
查看更多节日