需要 Laravel 验证|除 0 外存在

Mar*_*ala 4 php validation laravel laravel-5

HTML 表单具有选择下拉列表,其中包含现有类别列表,而没有 id=0 的类别。CategoryStoreRequest 必须检查表单中的 category_id 是否属于现有类别或为 0

类似的东西

public function rules() {
    return [
        "name" => "required|min:3",
        "category_id" => "required|exists:categories,id,except_if_value_is_0"
    ];
}
Run Code Online (Sandbox Code Playgroud)

实现它的最优雅的方法是什么?

Mar*_*ala 8

事实证明,这nullable是一种非常优雅的方法。提交表单时,category_id 数组键仍然存在,但其值为空。nullable 也允许键为空。

public function rules() {
    return [
        "name" => "required|min:3",
        "category_id" => "nullable|exists:categories,id"
    ];
}
Run Code Online (Sandbox Code Playgroud)

此外选择值必须是“”

<select name="category_id">
    <option value="">No category selection</option>
    <option value="1">Cat 1</option>
</select>
Run Code Online (Sandbox Code Playgroud)


man*_*niL 2

exists or 0您可以将自定义零值设置为NULL或空字符串,而不是检查。

您需要更改一点逻辑,但随后您可以使用“有时”规则来正确验证它:

public function rules() {
    return [
        "name" => "required|min:3",
        "category_id" => "sometimes|exists:categories,id"
    ];
}
Run Code Online (Sandbox Code Playgroud)