Laravel

分类下相关文章

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', ]; ...

阅读全文...

打印 laravel eloquent 数据库查询对应的 raw sql 日志

在进行复杂查询时,我有时候会对 laravel eloquent 生成的 sql 语句没有信心,需要打印 sql 语句以核对。 方案一:toSql() $sql_orders = Order::where('user_id', $user_id); Log::debug($sql_orders->toSql()); 日志输出为: local.DEBUG: select * from orders where user_id = ? 方案二:DB::getQueryLog() 显示最后一条查询 DB::enableQueryLog(); // 注意,在查询前,需要启用查询日志 $sq ...

阅读全文...

Laravel 自定义校验规则 - Rule Objects

需求 在使用 laravel backpack table 组件时,需要对几个自定义规格字段做校验。例如: 名称、销售价格、成本价为必填 价格确认为数字 而这个是用 laravel 自带的校验规则无法满足的。 自定义校验规则 新建一个 Rule Objects php artisan make:rule SpecFieldRequired 此时,会发现多了一个文件 app/Rules/SpecFieldRequired.php 模拟的输入数据 local.INFO: [{"name":"1斤装","price":"5 ...

阅读全文...

记录 laravel 错误日志的来源文件名及行号,方便定位

最近总是看到服务器日志中出现 local.ERROR: Creating default object from empty value 但是,并不知道具体是哪里记录的,需要定位这行错误是哪里抛出来的。 > grep Log::error -r app/ app/Http/Controllers/Admin/CommentCrudController.php: Log::error($e); app/Http/Controllers/Admin/SmsController.php: \Log::error($e); app/H ...

阅读全文...

Laravel ajax 请求 api 的权限控制

希望得到的效果 在 web 网站中,一些页面的数据需要登录之后才能拉取。 在用户未登录时,ajax 请求某个 API,后台报 401 未授权错误 在用户登录后,可以正常 ajax 调用该 API 是否登录需要使用当前 web 的登录状态,所以不能使用类型小程序那种 token 的方案。 解决方法 修改 app/Http/Kernel.php middlewareGroups 中 api 的配置,添加两行: \App\Http\Middleware\EncryptCookies::class, \Illuminate\Session\Middleware\StartSession::clas ...

阅读全文...

Laravel 通过 snsapi_base 静默授权获取用户微信公众号 openid

由于 JSAPI 调用微信支付需要用户的 openid,所以要了解如何获取到 openid。 还是官方的文档说的清楚 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842 以 snsapi_base 为 scope 发起的网页授权,是用来获取进入页面的用户的 openid 的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)。 应该是用在登录之后,如果没有绑定 open_id 就应该立即调用授权。 前端判断是否在微信中,同时判断是否有 openid,如果在微信中,已登录并且 ...

阅读全文...

Laravel 登录之后,跳转回登录前的页面

场景 我自定义了一套 laravel 的登录逻辑,使用手机号加验证码登录,没有使用 laravel 内置的登录逻辑。 实现方法 先列一下解决方法,然后再一一说明。 例如,如果购物车页面需要登录之后才能访问,并且点击购物车,弹出登录页面,完成登录之后,需要跳回到购物车页面。 首先需要在 route 上加上权限控制。 Route/web.php Route::get('cart', [ 'uses' => 'CartController@cart_index', // 购物车页面 ])->middleware('auth'); 在 web.php 内的 route 不 ...

阅读全文...

The requested resource /login was not found on this server

非常诡异的一个问题。 在 route 中定义了 login 的路由,但是访问 login 链接时,一直报错 The requested resource /login was not found on this server 而这个 404 页面又跟平时的 Laravel 404 页面完全不同。 检查才发现项目根目录的 public 目录下,有个同名的 login 目录,所以请求 login 链接时,实际上请求的是 public 下的 login 目录。。。 把 public 下的 login 目录更名之后,就解决了这个问题。 ...

阅读全文...