开发

Laravel 5.5 的自定义验证对象/类

Laravel 5.5 将提供一个全新的自定义验证规则的对象,以作为原来的 Validator::extend 方法的替代。

Laravel 中的表单验证是比较方便的,而且内置了大量的可用验证规则,但不管官方提供了多少,总还是会有满足不了需求的时候。很多时候我们会直接用正则表达式来处理这种特殊的验证,也有时候我们会选择用 Validator::extend 来扩展一个自定义的规则。但在 Laravel 5.5 版本中,我们有了新的手段,只要定义一个实现 Illuminate\Contracts\Validation\Rule 接口的类即可实现自定义的验证规则,并可以直接使用。

继续阅读 →

本条目由小李刀刀发布于 2017-08-28。属于 PHP,被贴了 开发、PHP、Laravel 5.5 标签。PHP2017-08-28 · 小李刀刀

[译]Laravel 5.0 之 Eloquent 属性转换

本文译自 Matt Stauffer 的系列文章.


之前完全忘了要把这个 Laravel 5 的系列博客写完,不过最近看到了一篇关于属性转换的简介 Laravel 5 Eloquent Attribute Casting is Awesome, 所以我决定把这个特性加到我的系列文章中。官方文档的 Eloquent 相关部分在这里。

什么是属性转换

转换一个属性值的意思是把它转换成某个特定的数据类型(或者是为了确保它是某个特定的数据类型)。数据类型我们都很熟悉了,比如 integer 或者 boolean.

属性转换是 Eloquent 模型的一个功能特性,这个特性让我们可以赋予 Eloquent 模型中的某个属性转换为一个特定的数据类型。

提示:在以前版本中也可以这样做,但是必须为每个属性定义一个自动赋值的方法。而在新版本中可以通过单一的数组配置让模型自动完成这些工作。

这意味着假如你的数据是以特定的格式存储在数据库中,而你在使用时需要的是另外一种格式,现在你可以配置 Eloquent 模型自动完成两种格式之间的转换工作。

为什么要这样做?

最常见的应用场景可能是:当你存储数字的时候——它们默认是返回字符串,但 Eloquent 属性转换可以帮你把字符串转换为 integer, real, float 或者 double,当然还可以转换为 boolean.

但这就是全部了吗?当然不是。

它是如何实现的?

要应用属性转换这个功能,你需要在你的模型中添加一个 protected $casts 的数组变量。

<pre class="brush:php">
/**
 * The attributes that should be casted to native types.
 *
 * @var array
 */
protected $casts = [
    'is_admin' => 'boolean',
];

如上面代码所示,数组中的每个元素以属性名为 key, 要转换的目标类型为 value. 这个数组变量 $casts 的作用就是告诉 Eloquent:“每次当我访问这个模型中的 is_admin 属性的时候,返回一个类型为 boolean 的值给我”。

转换类型

integer(int)

这会把你指定的属性值转换为整形,通过 return (int) $value 来实现。

float(real|double)

Real, Float 和 Double 在 PHP 中是同一种类型。 PHP 的 (double) 和 (real) 类型转换都是 (float) 的别名。所以指定为这三种时,其实在代码中都是通过 return (float) $value 来实现的。

string

这个很简单,就是把你指定的属性值转为字符串返回,用的是 return (string) $value.

boolean(bool)

这是把你指定的属性值转换为布尔值返回,用 return (bool) $value 实现,这意味着你要把你的数据存储为 0 和 1.

object

对象和数组是最有意思的选项。都是用把序列化为 JSON 格式数组的数据转换(反序列化)并返回。如果指定为 object, 那么是用 return json_decode($value) 实现的,返回一个 stdClass 类型的对象。

array

这个值是把 JSON 化的数组转换为 PHP 数组,用 return json_decode($value, true) 实现。

如果你需要看一下源代码,请点击这里。

写在最后

如你所见, Eloquent 属性转换功能把我们从大量不必要的重复逻辑中解放出来,并且默默地让我们更容易在数据库中存储 JSON 数据。真是好东西!

继续阅读 →

本条目由小李刀刀发布于 2015-03-13。属于 PHP,被贴了 开发、PHP、翻译、Laravel 5 标签。PHP2015-03-13 · 小李刀刀

[译]Laravel 5.0 之自定义错误页面

本文译自 Matt Stauffer 的系列文章.


在以往版本的 Laravel 中,假如你想自定义错误页面——比如当用户访问不存在的页面时显示一张猫的 GIF 动画图片——你可能会通过 Google 进行搜索,然后找到 Dries Vints 写的这个文档。

在 Laravel 5 中,这个问题得到了改进。>>直达解决方案

继续阅读 →

本条目由小李刀刀发布于 2015-03-13。属于 PHP,被贴了 开发、PHP、翻译、Laravel 5 标签。PHP2015-03-13 · 小李刀刀

[译]Laravel 5.0 之事件自动生成

本文译自 Matt Stauffer 的系列文章.


创建一个事件及其处理程序,再把两者关联起来,或者创建一个命令及其处理程序,再把两者关联起来。有时候这看起来需要大量的工作。因此我经常期望能有一个工作流可以把所有这些工作整合在一起来处理。

继续阅读 →

本条目由小李刀刀发布于 2015-03-10。属于 PHP,被贴了 开发、PHP、翻译、Laravel 5 标签。PHP2015-03-10 · 小李刀刀

[译]Laravel 5.0 之事件调度程序 (定时任务)

本文译自 Matt Stauffer 的系列文章.


关于 Laravel 5.0 的事件调度程序(可以理解为定时任务),Eric Barnes 有一篇很长的文章。我这篇文章则会尽量简短:

Laravel 5.0 新增了一个框架内置的 cron 风格的令人难以置信的调度程序(与 Indatus 的 Dispatcher 类似)。只要在服务器上设置一个每分钟调用 artisan schedule:run 的 cron job, 一切就准备就绪了。

继续阅读 →

本条目由小李刀刀发布于 2015-02-22。属于 PHP,被贴了 开发、PHP、翻译、Laravel 5 标签。PHP2015-02-22 · 小李刀刀

[译]Laravel 5.0 之运行环境及环境变量

本文译自 Matt Stauffer 的系列文章.


如果你关注我的博客有段时间了,那你应该曾经见过我在 Laravel 环境检测问题上的各种尝试,特别使用环境变量进行检测这方面。例子

感谢 Laravel 5, 它极大地简化了环境检测环节。在 4.x 版的时候,你要创建多个基于运行环境名称的环境配置文件(比如 .env.php, .env.local.php 等)。老实说,我从来用过这个功能。但我觉得理论上你应该会把所有环境配置文件提交到代码库。但由于我们从来不提交任何环境配置文件,所以这种区分环境的手段毫无用处,而且它还会造成环境配置文件的延迟加载,因为只有检测到运行于什么环境之后,它才能进行相应的配置文件加载。

继续阅读 →

本条目由小李刀刀发布于 2015-02-22。属于 PHP,被贴了 开发、PHP、翻译、Laravel 5 标签。PHP2015-02-22 · 小李刀刀

[译]Laravel 5.0 之 Middleware (Filter-Style)

本文译自 Matt Stauffer 的系列文章.


如果你有阅读我之前的 Laravel 5.0 系列文章,你可能已经注意到路由过滤器(route filters)的变化:它们先是移到了单独的目录和类结构,然后就莫名其妙地消失了。你可能还留意到在原本应该是路由过滤器的地方,变成了对 Middleware 的引用。

实际上给 Laravel 应用添加自定义的 Middleware 在以前的版本中就有了。 Chris Fidao 的 HTTP Middleware in Laravel 4.1 对 middleware 做了全面的介绍,包括 middleware 在 Laravel 4.1 版本中的工作机制。

继续阅读 →

本条目由小李刀刀发布于 2015-02-21。属于 PHP,被贴了 开发、PHP、翻译、Laravel 5 标签。PHP2015-02-21 · 小李刀刀