Laravel 5.6 给 Blueprint 增加自定义方法

PHP 基本功足够扎实的情况下,强烈建议学习 Laravel 的过程除了阅读官方文档外,仔细阅读框架源码;或许会有小惊喜哟。 0x00 准备 Laravel 5.6 php artisan make:migration ... 近期在项目过程中,遇到这么个需求:在所有模型表内都需要支持自增主键 id、创建时间、更新时间以及软删除,以备不时之需。 于是乎。传统的做法是,在每个迁移 Schema::create 回调内,都写一遍 $table->increments + softDeletes + timestamps,就像这样:

August 28, 2018 · Wi1dcard

在终端内排序 Markdown 表格

序 最近新项目写 README,在编排实体命名协定中英对照的时候,有使用到 Markdown 的表格。那么如何按照某列的字母顺序排序 Markdown 表格呢?实际上,一条 Shell 命令就足以解决。请看大佬的实现。 正文 TableFlip 目前还无法根据列排序表格. 所以我们不得不使用其他方法,比如 Shell 或者 Terminal 命令. 首先,我们假设你的 Markdown 表格由一个两行的表头开始,并且每行开头都有管道操作符(|),就像这样:

August 26, 2018 · Wi1dcard

PHP JSON Serializer

Serialize & unserialize data to & from JSON. Compatible with serialized data and supported accessing unserialized data as a object & array.

August 21, 2018 · Wi1dcard

Laravel 5.6 路由参数排除匹配

Laravel 提供 where 方法和 Route::pattern 方法,用于设置某个路由参数必须匹配指定表达式,则此路由才会被匹配。 那么,如何设置排除某个「关键词」(或者我们称它为「特殊参数值」),只有这个关键词不匹配,其它都匹配呢? 举个例子 Route::domain('{user}.example.com'); Route::pattern('user', '???'); ??? 处代表二级域,通常不可以设置为一些敏感保留词,比如 www / admin 等。 解决方案 实际上,Laravel 的路由参数匹配,使用的正是正则表达式。所以,这就好办了。

August 18, 2018 · Wi1dcard

Laravel 5.6 使用 MongoDB 存储框架日志

网上的文章普遍是 Laravel 5.5 版本,而日志系统在 5.6 版本升级时进行了部分改动,原有方法基本都失效了。本文根据 Laravel 5.6 文档的指引,实现使用 MongoDB 存储框架日志。 0x00 准备 MongoDB Engine 首先,安装 MongoDB,参见 官方文档。 MongoDB Driver(PHP Extension) 其次,安装 PHP mongodb 扩展,参见 官方文档。

August 15, 2018 · Wi1dcard

Git 仓库查找已追踪的大文件

当我们的 Git 仓库越来越大,或者不小心提交了二进制大文件,如何快速找出仓库内的「罪魁祸首」? 实践 实际上非常简单,一条命令就能搞定。 git rev-list --objects --all \ # | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' \ | sed -n 's/^blob //p' \ | sort -r -n -k 2 \ | head -10 \ | cut -c 1-12,41- \ | numfmt --field=2 --to=iec-i --suffix=B --padding=7 --round=nearest 注意,在 macOS 使用此命令需要安装 brew install coreutils --with-default-names。

August 10, 2018 · Wi1dcard

PHP 快速扫描列表创建无限极分类树

书接上回。上文结尾,讲解了引用的妙用。刚好,在我现在所处公司的业务里有一处用递归实现的「省市区」分级列表;本文将这一用途搬进生产环境,通过优化此省市区列表,试试真正的效果如何。 废话不多说,上代码。 省市区列表结构 array( 1 => array( 'id' => 1, 'name' => '中华人民共和国', 'parent_id' => 0, 'level' => 'country', ), 2 => array( 'id' => 2, 'name' => '北京市', 'parent_id' => 1, 'level' => 'province', ), 20 => array( 'id' => 20, 'name' => '天津市', 'parent_id' => 1, 'level' => 'province', ), 38 => array( 'id' => 38, 'name' => '河北省', 'parent_id' => 1, 'level' => 'province', ), 218 => array( 'id' => 218, 'name' => '山西省', 'parent_id' => 1, 'level' => 'province', ), 349 => array( 'id' => 349, 'name' => '内蒙古自治区', 'parent_id' => 1, 'level' => 'province', ), 465 => array( 'id' => 465, 'name' => '辽宁省', 'parent_id' => 1, 'level' => 'province', ), .

August 6, 2018 · Wi1dcard

PHP 引用详解 - 踩坑与妙用

最近在关注「PHP 引用」这一话题,看过不少深度文章,对 PHP 里的「引用」有了更深的理解。 0x00 首先看如下代码: $foo['hello'] = '0'; $bar = &$foo['hello']; // 引用! $tipi = $foo; $tipi['hello'] = '1'; print_r($foo); 问:输出 0 还是输出 1?答案是 1。

August 6, 2018 · Wi1dcard

VS Code 清理工作区文件

前些天扫描大文件的时候,发现一个目录 ~/Library/Application Support/Code/User/workspaceStorage 占用非常大,看起来罪魁祸首像是 VSCode; 于是谷歌一番,发现 GitHub 上有一条 Issue 讨论这事。 传送门:https://github.com/Microsoft/vscode/issues/39692 其中有一条 Comment 是这样的: All extension should be able to recreate their storage although they might answer some questions.

August 3, 2018 · Wi1dcard

特喵的随机 Git 提交信息

2333… 最近发现一个神奇的站点,随机生成 Git commit message。 http://whatthecommit.com/ 至于用到 Git 上: git commit -m $(curl -s http://whatthecommit.com/index.txt) 😂 七月马上又要过去了。 最近在封装支付宝的 SDK,所以博客有一小阵子没有更新。

July 26, 2018 · Wi1dcard