POST PUT PATCH 的单一表单请求类

表单请求验证 示例之后,相同的请求类可以用于 POSTPUTPATCH,因此你不必使用相同/类似的验证来创建另一个类。如果你的表中的属性是唯一的,那么这会派上用场。

/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
public function rules() {
    switch($this->method()) {
        case 'GET':
        case 'DELETE':
            return [];
        case 'POST':
            return [
                'name'     => 'required|max:75|unique',
                'category' => 'required',
                'price'    => 'required|between:0,1000',
            ];
        case 'PUT':
        case 'PATCH':
            return [
                'name'     => 'required|max:75|unique:product,name,' . $this->product,
                'category' => 'required',
                'price'    => 'required|between:0,1000',
            ];
        default:break;
    }
}

从顶部开始,我们的 switch 语句将查看请求的方法类型(GETDELETEPOSTPUTPATCH)。

根据方法将返回定义的规则数组。如果你有一个唯一的字段,例如示例中的 name 字段,则需要指定要忽略的验证的特定 ID。

'field_name' => 'unique:table_name,column_name,' . $idToIgnore`

如果你的主键标记为 id 以外的其他键,则将主键列指定为第四个参数。

'field_name' => 'unique:table_name,column_name,' . $idToIgnore . ',primary_key_column'

在这个例子中,我们使用 PUT 并将路径(admin/products/{product})传递给产品 id 的值。所以 $this->product 将等于 id 忽略。

现在你的 PUT|PATCHPOST 验证规则不需要相同。定义符合你要求的逻辑。此技术允许你重用自定义表单请求类中定义的自定义消息。