laravel优雅的表单验证。
当商品编辑时,需要校验当前分类下商品名称是否重复,需要查询当前分类下除了此ID的所有商品名称
1.商品的CRUD资源路由
Route::resource('goods', 'GoodsController', ['parameters' => ['goods' => 'id']]);//parameters的意思是修改路由的参数为ID
2.App\Http\Requests\GoodsRequest
<?php
namespace App\Http\Requests;
use Illuminate\Database\Query\Builder;
use Illuminate\Validation\Rule;
class GoodsRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
switch ($this->method()) {
case 'PUT':
{
//类别ID
$typeId = $this->input('type_id');
//商品ID
$id = $this->route('id');
return [
'type_id' => ['required', 'numeric'],
'name' => ['required', Rule::unique('goods')->where(function (Builder $query) use($typeId, $id){
return $query->where('type_id', $typeId)->where('id', '!=' , $id);
})],
];
}
case 'PATCH':
case 'DELETE':
default:
{
return [
];
}
}
}
public function messages()
{
return [
'type_id.required'=>'分类不能为空',
'type_id.numeric'=>'分类ID格式错误',
'name.required'=>'名称不能为空',
'name.unique'=>'当前分类下商品名称重复',
];
}
}