Laravel

分类下相关文章

Laravel 的 JSON API 接口自动化测试

这两天写了几个接口,赶得急,完全没有测试。上线之后,前端的同事一调用,各种 500 错误。。。 甚是尴尬,老脸有点兜不住,所以今天决定把新增的接口 API 都加上自动化测试。 Laravel 自带了两种测试类型 Feature Test: 功能测试。针对类似接口这种流程性的测试。 Unit Test: 单元测试。针对单个函数这种输入输出结果的测试。 新建一个 Feature Test php artisan make:test FinishOrderTest 项目根目录下多了一个文件 tests/Feature/FinishOrderTest.php 安装 phpunit 要执行测试案例 ...

阅读全文...

Laravel firstOrNew 与 firstOrCreate 的区别

例如: $item = App\Deployment::firstOrNew( ['name' => '问答小程序'], ['delayed' => 1] ); firstOrNew 需要手动调用 save,才会保存到数据库。适合同时需要修改其他属性的场景。 firstOrCreate 会自动保存到数据库。适合不需要额外修改其他属性的场景。 注意:MassAssignmentException firstOrCreate 一定要设置 model 的 fillable, 否则会报 MassAssignmentException 的错误。 参考: Laravel Mode ...

阅读全文...

Laravel collection 报错 join(): Invalid arguments passed

混淆了 array 与 collection,join 并不支持 collection. array 与 collection 不同的 join 实现 collect([1, 2, 3, 4, 5])->implode('-'); join('-', [1, 2, 3, 4]); 将 array 转换成 collection $collection = collect([1, 2, 3]); 将 collection 转换成 array $collection->toArray(); all() 与 toArray() 的区别 如果 collection 中的 item 是 ...

阅读全文...

清理 laravel blade 模板缓存

早上遇到一个奇怪的问题,写了一个简单 laravel backpack table view 页面,打开时反复报错 View [inc.datatables_logic] not found 在 vendor 下 grep 了一下,根本找不到 inc.datatables_logic 的使用记录。 而 inc.datatables_logic 是新版本的 backpack crud 引入的,我用的是旧版本,根本没有这个引用。所以,我联想到会不会是昨天升级 backpack crud 3.4 失败,回滚之后,虽然代码恢复了,但是 blade 模板依然被缓存了。。。 php artisan v ...

阅读全文...

laravel console - 自定义命令

在改造一个支付流程,新的流程加入了一个新的数据表字段,但是这个新的字段需要通过计算来填充,所以为了兼容历史数据,必须将已有的数据行重新计算一遍该字段。 这时使用 laravel console 命令就非常方便,因为可以共用 .env 中的数据库连接配置,以及定义好的 model。 自动创建 console 命令类 php artisan make:command YourCommand 这时会看到目录 app/Console/Commands 下多了一个新的命令类,在 handle 中写计算逻辑即可。 console 命令类的几个必填项 signature 命令名及参数指定 descrip ...

阅读全文...

使用 laraval migration 修改数据库表结构

之前一直使用 sql 文件来保存并跟踪数据库表结构的变化。但是使用 sql 文件有以下弊端: 无法判断哪些 sql 文件执行了,哪些没执行。虽然加了日期做为 sql 文件名前缀,但是在多人开发,且长时间没有更新线上数据表结构时,经常要挠头 执行 sql 文件是件体力活。当你面对十几个 sql alter 文件时,逐个执行非常累心。 多套开发、生产环境同步起来还是费时费力。例如,PC 开发机上进行了一次修改,还要同步到笔记本开发环境上,想想都难受。 这些问题,远不如执行一行 migration 来的痛快。 增加一个新字段 例如,我要给 articles 表增加一个 images 字段。 首先 ...

阅读全文...

Laravel Backpack reorder 视图的复用

影响复用的几个因素 API URL 抽象 local storage key 前缀 但是通过 $crud 就非常好解决。因为在 backpack admin controller 中有这样一行 $this->crud->setRoute(...); 这说明,API URL 可以通过 crud 的 route 取出来。看一下 $crud 的属性 dd($crud); CrudPanel {#988 ▼ +model: Category {#716 ▶} +route: "admin/categories" +entity_name: "分 ...

阅读全文...

Laravel Backpack 分类管理功能的用户体验优化

Backpack 自带的分类管理界面,用户体验非常不好。因为其默认的首页是分类列表,而不是分类树形展示。 最简单有效的做法是重写 reorder 组件。 我预期的效果是这样的,参考了 wordpress 分类管理页面的设计 复制 ./vendor/backpack/crud/src/resources/views/reorder.blade.php 到目录 resources/views/vendor/backpack/crud/ 通过 Ajax 新建分类 首先,确认 backpack 是否已支持 ajax CRUD。 从列表页的 delete 操作来看,确实是默认支持的 Request U ...

阅读全文...

Laravel Backpack 同一个自定义 field 组件在单页内多次出现的处理

Bug 描述 之前写了个自定义的 summernote 富文本框组件,可以将插入图片自动同步到七牛 CDN。 但是,如果页面中使用了两个该组件,第二个文本框插入的图片都会插入到第一个中。。。 问题产生的原因是,使用的是 class 选择器,都选择了 .summernote 解决方法 解决思路非常简单,为每个组件定义不同的 ID。 令人浑身发痒的地方是,需要在 js 里嵌入 PHP 代码 HTML 部分 <textarea id="summernote_{{ $field['name'] }}" name="{{ $field['name'] }} ...

阅读全文...

Laravel Backpack Create Model 时生成随机值,该字段在用户界面不可见

有时,需要在 create 时自动生成一些字段的值,而编辑时该字段不可改变。 public static function boot() { parent::boot(); self::creating(function($model){ $model->order_id = Utils::generate_random_order_id(); }); } ...

阅读全文...

Laravel 禁用指定 URL POST 请求的 csrf 检查

由于在 chrome 插件中使用了跨域请求,所以需要禁用掉 laravel 默认的 post csrf 检查。 配置方法: 在 app/Http/Middleware/VerifyCsrfToken.php 中,添加 except 规则。 例如: class VerifyCsrfToken extends BaseVerifier { protected $except = [ 'api/plant_tree/*', ]; } ...

阅读全文...

修改 Laravel Backpack Admin 后台登录之后的默认首页

Backpack Admin 后台登录之后默认是 dashboard 页。 但是对于小系统来说,这个 dashboard 页毫无用处。所有需要替换为主要的数据管理页。 修改方法,将 routes/web.php Route::get('/', function () { return redirect('admin/dashboard'); }); 替换为 Route::get('/', function () { return redirect('admin/some_other_route'); }); Route::get('/admin/dashboard', fu ...

阅读全文...

Laravel make migrate 报错:Specified key was too long

初始化 laravel 项目时,在我 mac 的旧版本 mysql 5.5 上总会报错,而 MySQL v5.7.7 则一切正常。 无论是 laravel 5.4 还是 5.5 都有这个问题 SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table users add unique use rs_email_unique(email)) 解决方法,修改 app/Providers/AppS ...

阅读全文...

laravel 5.6 发布,新特性介绍

早上蹲坑的时候在 reddit 上看到 laravel 5.6 发布了。粗略看了一下,一些新功能 bootstrap 4 内置的注册登录页面、分页按钮样式由 bootstrap 3 升级到 bootstrap 4。 独立的 log 配置文件 config/logging.php 计划任务的单机执行 之前的版本,如果部署在3台服务器上,那么同一个计划任务会执行3遍。单对于一些统计任务,这样做是不合理的。laravel 5.6 新版本提供了 onOneServer 功能,保证一个任务只会在一台服务器上执行。 $schedule->command('report:generate') ...

阅读全文...

保存 laravel model 而不更新 timestamps 的方法

例如,当用户查看一个商品时,会增加其浏览量,但是此时又不希望保存导致更新时间戳 updated_at 方法一 $product = Product::find(1); $product->view_count += 1; $product->timestamps = false; $product->save(); 方法二 $product->save(['timestamps' => false]); 重置数据库数据 update products set updated_at = created_at; ...

阅读全文...