php - Laravel - 特定字段的永久验证
问题描述
在我的网站上有很多地方我要求人们指定他们的电话号码或其他类型的数据。每个地方,验证规则都是相同的,并且在每个验证器中一遍又一遍地链接相同的验证规则并不那么漂亮,并且不利于验证规则的未来更新。想想看,例如,当我想更改电话号码验证规则时,我需要在每个表单验证器上更改它。
我知道我可以使用扩展添加自定义验证规则并添加一些正常的 php 条件以实现所需的验证,但这并不是我想要做的,因为我想使用几个 Laravel 验证,而不是添加验证我自己的。
有没有办法做到这一点?我浏览了所有 Laravel 文档,但没有找到任何方法可以做到这一点。
解决方案
也许一个好的方法是创建一个UsesCommonRules
包含名为 的方法的 Trait,该方法getCommonRules()
将返回一个包含规则的数组。
namespace App\Traits;
trait UsesCommonRules
{
public static function getCommonRules(){
return [
'date' => 'required|date',
'type' => 'in:A,B'
];
}
}
然后,您可以将任何其他规则与请求内的通用规则合并,如果您正在控制器中进行验证,则可以直接在控制器中合并。
namespace App\Http\Requests;
use App\Traits\UsesCommonRules;
use Illuminate\Foundation\Http\FormRequest;
class MyRequest extends FormRequest
{
use UsesCommonRules;
public function rules()
{
return array_merge(self::getCommonRules(), [
'city_id' => 'required'
]);
}
}
您可以在UsesCommonRules
trait 中创建更多动态函数,例如接收参数以指示应返回、排除哪些规则,或组合具有相同名称的字段的规则。
推荐阅读
- ios - 无法单击自定义 UICollectionViewCell 内容
- node.js - 使用 multer 发送状态和文件
- tensorflow - Tensorflow - 训练亚当
- c - 什么是形式参数中的默认存储类
- azure - 如何在 VSTS 中部署 azure 函数应用代码和 ARM 模板
- r - 什么是 dplyr rowwise() 的 Plyr 版本
- azure - 如何使用 Terraform 将 VM 添加到 Azure 中的负载均衡器?
- sql - 我不知道如何创建这个 sql 查询
- php - 格式化 PHP 数组以生成 JSON 数组,而不是对象
- mysql - 按列 id 选择行,如果为 null,则包括包含另一列中相同值的行