今天介绍两个 Laravel5 中非常受欢迎的包和 Carbon
- Intervention Image 图像处理
- Laravel Excel 表格处理
- Carbon 时间处理

图像处理
Intervention/image 是一个图片处理工具,它提供了一套容易理解的方式来创建、编辑图片。它实现了 ServiceProvider、Facade 等来方便地在 Laravel 中使用。
Composer 安装
1 | composer require intervention/image |
添加 ServiceProvider:
1 | 'providers' => [ |
使用如下命令创建一个配置文件 config/image.php
1 | php artisan vendor:publish |
配置
先确定本地已经安装好 GD 或 Imagick
此扩展包默认使用 PHP 的
GD库来进行图像处理,但由于 GD 库对图像的处理效率要稍逊色于imagemagick库,因此这里推荐替换为 imagemagick 库来进行图像处理
在使用 Intervention Image 的时候,你只需要给 ImageManager 传一个数组参数就可以完成 GD 和 Imagick 库之间的互相切换:
1 | $manager = new ImageManager(['driver' => 'imagick']); |
例子
1 | use Intervention\Image\ImageManager; |
除介绍的基本用法之外,此扩展包还支持:
- 上传功能
- 缓存功能
- 过滤功能: 将图片按照统一规则进行转换
- 动态处理: 根据访问图片的 URL 参数自动调整图片大小
Excel 处理
Laravel Excel 是建议在 Laravel 中使用的 Excel 处理包,它把原来 PHPOffice 的 PHPExcel 的强大功能在 Laravel 5.x 框架中再实现,还实现了 Laravel 的集合、模型、视图、配置等。
Composer 安装:
1 | composer require maatwebsite/excel |
添加 ServiceProvider:
1 | 'providers' => [ |
使用如下命令创建一个配置文件 config/excel.php
1 | php artisan vendor:publish |
Import 导入
1 | use Maatwebsite\Excel\Facades\Excel; |
这里对 $reader 使用 get() 或 all() 方法时会生成 Sheet 集合(单个工作簿),可以使用 getTitle(),toArray(),toObject() 等方法。
使用 first() 或通过 each() 或 foreach() 遍历时,会生成 Row 集合(一行数据),这时 toArray() 就是最终结果了。
工具默认会把第一行当作 title,最后数据从 A2 单元格开始。
第一行的大写字母会转成小写输出,汉字为空。
整个结果集是 LaravelExcelReader 对象。
Export 导出
有模型和数组两种方式:
1 | $model = AdminModel::query()->get(); |
Carbon便捷处理时间
Carbon 是一个 PHP 的时间处理包,它继承自 DateTime 类的 API 扩展,让处理日期和时间更加简单。
使用方式:
1 | composer require nesbot/carbon |
1 | use Carbon\Carbon; |
后者除了继承于前者,还实现了 JsonSerializable interface 和 Macroable trait
实例化
1 | Carbon::now();//同Laravel辅助函数now() |
字符串输出
1 | $dt = Carbon::create(1975, 12, 25, 14, 15, 16); |
比较
常用比较如
eq(equalTo)ne(notEqualTo)gt(greaterThan)lt(lessThan)gte(greaterThanOrEqualTo)lte(lessThanOrEqualTo)
这些比较使用的是 == ,在 PHP7.1 前忽略毫秒微秒的差别。
其它可用比较方法:
1 | //过去or未来 |
自增自减
可以对世纪、年、季度、月、周、时、分、秒进行 add() 加或 sub() 减
1 | //世纪 |
求差
有时我们会使一件事在一个周期里只允许一次,例如发年终奖,这时我们可以判断 今天 和 上次发年终奖 对于 发年终奖日期 是否在同一年
1 | //今天是第几年发奖 |
同理也有 diffInHours() diffInDays() 等方法
常量
Carbon 提供了许多方便的常量,例如:
1 | var_dump(Carbon::SUNDAY); // int(0) |