Laravel 有个很好用的 FormRequest , 可以把表单验证的代码从控制器层剥离,增加代码的可读性。
除了自带的表单验证规则外,很多时候我们需要自定义闭包规则,这有可能会用到其他字段的输入值。
具体代码如下:
<?php namespace AppHttpRequests; use AppModelsLaunchChannelContactWay; use IlluminateFoundationHttpFormRequest; use IlluminateHttpRequest; class LaunchRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { $path = Request::getPathInfo(); switch ($path){ case '/api/add_launch_channel_contact_way': $rules=[ 'channel_id'=>[ 'required', 'int', 'exists:launch_channels,id', function($attribute, $value, $fail){//自定义验证闭包 $unique=LaunchChannelContactWay::query() ->where('launch_channel_id',$value) ->where('activity_name',$this->input('activity_name'))//获取activity_name字段值 ->count(); if($unique>0){ $fail('渠道活动配置已存在'); } }], ]; break; default: $rules = []; break; } return $rules; } }
Enjoy it !