Laravel

分类下相关文章

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

阅读全文...

Laravel model save 时判断指定字段是否发生更改

需求场景,当订单表中的快递公司,或者快递单号发生改变时,更新快递表中的相关字段。 要满足这个需求,就需要能知道订单 Model 更新时,是否修改了这两个字段。 解决方法是使用 getChanges 方法,例如: $order->express_company = '顺丰'; $order->save(); Log::info($order->getChanges()); [2019-01-24 09:46:01] local.INFO: array ( 'express_company' => '顺丰', 'updated_at' => '2019-0 ...

阅读全文...

Laravel easywechat 设置 wx.config

wx.config(<?php echo app('wechat')->js->config(array('updateAppMessageShareData','updateTimelineShareData'), false) ?>); Windows 上报错 cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html) 解决方法 到  https:// ...

阅读全文...

Laravel 读取前端 js 设置的 cookie 始终为空

在前端用 js 设置的 cookie,在后台用 Laravel 始终获取不到,取到的值为空。 例如 $value = $request->cookie('dingding_id'); 问题的原因 Laravel 默认认为 cookie 是被加密过的,例如,在后台设置的 cookie,会被自动加密。 而前端 js 新增的 cookie 是没有加密的,所以 laravel 认为是个无效的 cookie。 解决方法 修改 app/Http/Middlewares/EncryptCookies.php protected $except = [ 'dingding_id', ]; ...

阅读全文...

近期节日

2019年07月23日 大暑
2019年07月30日 非洲妇女日
2019年08月01日 八一建军节
2019年08月06日 国际电影节
2019年08月07日 七夕
2019年08月08日 立秋
2019年08月15日 日本投降日
2019年08月15日 中元节
2019年08月23日 处暑
2019年09月03日 抗日胜利纪念日
2019年09月08日 白露
2019年09月08日 国际扫盲日
查看更多节日