anlutro/l4-validation

Laravel 的验证服务类。

0.5.6 2015-02-06 18:23 UTC

README

安装: composer require anlutro/l4-validation

从 Packagist 或 GitHub 标签列表中选择最新稳定版本。

警告:在 0.x 版本期间不保证向后兼容性。

验证服务

此验证类是 Laravel 自身验证类(通过调用 Validator::make 创建)的层,旨在注入到存储库或控制器中。它允许更高级的规则集和更动态的规则,并且正在我的 存储库类 中使用。

您的类必须实现一个抽象方法:getCommonRules。这应该返回一个数组,其中包含在每次验证调用中使用的规则,应该是规则的最小集合。此外,您可以实现任意多的额外规则获取器 - getCreateRulesgetUpdateRulesgetUpdateAsAdminRulesgetFooRules 等。

根据您要尝试验证的操作动态合并规则。例如,$validator->validCreate($attributes) 将合并 getCommonRulesgetCreateRules。如果 getCreateRules 不存在,它将只使用 getCommonRules$validator->validUpdateAsAdmin($attributes) 将合并 getCommonRulesgetUpdateAsAdminRules。规则是递归合并的。

您可以使用 replace($key, $value) 方法告诉验证器用规则中的变量替换变量。例如,如果您有一个唯一规则并希望动态替换表为模型表,您可以这样做

public function getCommonRules() {
	return ['email' => 'unique:<table>'];
}

$validator->replace('table', $model->getTable());

该类还将用方括号中的匹配键替换规则中的变量。例如,[foo] 将替换为提供的输入(属性)中 'foo' 的值。这样,您可以将另一个输入字段的值添加到规则中(例如,'end_date' => ['date', 'after:[start_date]'])。

在正则表达式规则中,替换变量将不起作用,因为这可能会破坏正则表达式操作符。

您可以使用一些挂钩来添加自定义行为。在规则合并后,将调用 prepareRules($rules, $attributes),允许您根据需要更改验证规则。此方法 需要 返回修改后的规则数组!

prepareValidator($validator) 在检查验证是否通过之前被调用,并可用于将 sometimes() 规则或其他任何自定义行为添加到 Illuminate\Validation\Validator 对象本身。

异常

您可以调用 $validatorService->toggleExceptions(); 使验证器抛出异常而不是只返回 false。抛出的异常类型为 anlutro\LaravelValidation\ValidationException,它有一些有用的方法。

  • getErrors() 获取验证错误的一维数组。
  • getRules() 获取在验证时使用的规则数组。
  • getAttributes() 获取已验证的输入数组。

它还可以通过 (string) $exception 转换为字符串,这将逐行渲染每个验证错误。

联系

如果您有任何问题或建议,请在 GitHub 上提交一个问题。

许可证

此存储库的内容根据 MIT 许可证 发布。