Laravel

分类下相关文章

laravel 5.0 升级 6.18 之 Route::controllers 的处理

Route::controllers 是 Laravel 老版本的语法,在 Laravel 6.x 中已经不再支持。需要进行兼容处理。 laravel 6.x 下报错 例如: Route::controllers(['blog'=>'BlogController']); 报错 InvalidArgumentException : Attribute [controllers] does not exist. Route::controllers 这种用法在 Laravel 5.3 之后已经被废弃,由于历史项目中大量这种旧有的写法,即,controller 代码中大量的 getXX ...

阅读全文...

laravel 5.0 升级 6.18 之 router::filter 到 middleware 的改造

laravel filter 的原始意义 这是 laravel 4.x 及 5.0 中的概念 https://laravel.com/docs/4.2/routing#route-filters Route filters provide a convenient way of limiting access to a given route, which is useful for creating areas of your site which require authentication. filter 与 middleware 的对比 按照 laravel 6 文档的说法,mid ...

阅读全文...

Laravel 5.x 版本升级 6.x

需要将一套历史悠久的 laravel 5.0 / 5.2 系统,升级到 laravel 6 LTS 版本。同时,对应的 PHP 版本也要升级到最新的 PHP 7.4。由于代码量巨大,且逻辑多得看不过来,需要一套高效的策略来升级。 laravel 升级策略 官方只提供了 5.8 到 6 的升级建议 https://laravel.com/docs/6.x/upgrade 于是 Google 了一通,发现普遍的建议是,采用逐个小版本升级的方式。 To be honest you should make update step by step. First upgrade 5.2 to 5.3, t ...

阅读全文...

Laravel 7 新版本发布,新功能及更改

Laravel 7 为非 LTS 版本,目前只有 Laravel 6 和 5.5 版本是 LTS 版本。 路由缓存提速 提升 Laravel 的性能真是当务之急,Laravel 7 号称提升了 Route Caching 的速度。 以最简单的 Hello World 为例,提升了两倍的速度。然而杯水车薪。 内置了 HTTP Client 实际上是对 Guzzle 的封装,这下方便多了,不用再手动导入 Guzzle 了。 use Illuminate\Support\Facades\Http; $response = Http::post('url', [ 'name' => ' ...

阅读全文...

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

阅读全文...