Laravel 5.6 自定义迁移桩代码
书接上回,前面说到在迁移内给 Blueprint 增加自定义的 Macro。那么,当我们每次使用 php artisan make:migration 都需要手动修改一次模板吗?这不清真 = =。 0x00 思路 自定义 make:migration 所使用的 stub(「桩」,可以理解为模板)文件即可。 在开始之前,你首先需要创建属于你的 stubs 文件,我建议直接从 Laravel 5.
书接上回,前面说到在迁移内给 Blueprint 增加自定义的 Macro。那么,当我们每次使用 php artisan make:migration 都需要手动修改一次模板吗?这不清真 = =。 0x00 思路 自定义 make:migration 所使用的 stub(「桩」,可以理解为模板)文件即可。 在开始之前,你首先需要创建属于你的 stubs 文件,我建议直接从 Laravel 5.
PHP 基本功足够扎实的情况下,强烈建议学习 Laravel 的过程除了阅读官方文档外,仔细阅读框架源码;或许会有小惊喜哟。 0x00 准备 Laravel 5.6 php artisan make:migration ... 近期在项目过程中,遇到这么个需求:在所有模型表内都需要支持自增主键 id、创建时间、更新时间以及软删除,以备不时之需。 于是乎。传统的做法是,在每个迁移 Schema::create 回调内,都写一遍 $table->increments + softDeletes + timestamps,就像这样:
Serialize & unserialize data to & from JSON. Compatible with serialized data and supported accessing unserialized data as a object & array.
Laravel 提供 where 方法和 Route::pattern 方法,用于设置某个路由参数必须匹配指定表达式,则此路由才会被匹配。 那么,如何设置排除某个「关键词」(或者我们称它为「特殊参数值」),只有这个关键词不匹配,其它都匹配呢? 举个例子 Route::domain('{user}.example.com'); Route::pattern('user', '???'); ??? 处代表二级域,通常不可以设置为一些敏感保留词,比如 www / admin 等。 解决方案 实际上,Laravel 的路由参数匹配,使用的正是正则表达式。所以,这就好办了。
网上的文章普遍是 Laravel 5.5 版本,而日志系统在 5.6 版本升级时进行了部分改动,原有方法基本都失效了。本文根据 Laravel 5.6 文档的指引,实现使用 MongoDB 存储框架日志。 0x00 准备 MongoDB Engine 首先,安装 MongoDB,参见 官方文档。 MongoDB Driver(PHP Extension) 其次,安装 PHP mongodb 扩展,参见 官方文档。
书接上回。上文结尾,讲解了引用的妙用。刚好,在我现在所处公司的业务里有一处用递归实现的「省市区」分级列表;本文将这一用途搬进生产环境,通过优化此省市区列表,试试真正的效果如何。 废话不多说,上代码。 省市区列表结构 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', ), .
最近在关注「PHP 引用」这一话题,看过不少深度文章,对 PHP 里的「引用」有了更深的理解。 0x00 首先看如下代码: $foo['hello'] = '0'; $bar = &$foo['hello']; // 引用! $tipi = $foo; $tipi['hello'] = '1'; print_r($foo); 问:输出 0 还是输出 1?答案是 1。
方法很多,列出几个,以供参考。 Laravel 源码里扒出来的 class_basename 辅助函数 basename(str_replace('\\', '/', $class)); substr 实现 substr(strrchr($class, "\\"), 1); // or substr($class, strrpos($class, '\\') + 1); explode 实现
最近为了尽可能优雅地实现产品需求,天天看 Yii 源码,感觉还是非常爽的。本文将要介绍如何使用 Yii 内置的方法,输出文件、流、字符串为下载响应。 通过查看 yii\web\Response 源码可知,其提供如下方法: public function sendFile($filePath, $attachmentName = null, $options = []); public function sendContentAsFile($content, $attachmentName, $options = []); public function sendStreamAsFile($handle, $attachmentName, $options = []); 那么如何在控制器内调用此方法输出呢?
上文讲解关于如何映射 Action,本文讲解如何映射 Controller。 0x00 实现 首先,在你的 Module 里,定义一个 $controllerRedirectMap 变量。 public $controllerRedirectMap = []; 重写 createControllerByID 方法。 public function createControllerByID($id) { if(isset($this->controllerRedirectMap[$id])) { $id = $this->controllerRedirectMap[$id]; } return parent::createControllerByID($id); } 0x01 用法 public $controllerRedirectMap = [ 'foo' => 'bar' // 访问 `module/foo/index` 将会被重定向至 `module/bar/index` 'foo/bar' => 'bar/foo' // 访问 `module/foo/bar/index` 将会被重定向至 `module/bar/foo/index` ]; 0x02 感想 一口气写三篇关于 Yii2 的博文,算是对自己近期项目中用到 Yii 以来的技巧小结吧。