【问题标题】:Laravel FormRequest validation rules not working as expectedLaravel FormRequest 验证规则未按预期工作
【发布时间】:2020-01-05 01:43:32
【问题描述】:

在我的 Laravel 应用程序中,我正在使用 Eloquent 创建一个动态搜索功能,并且我有一个如下所示的客户搜索表单:

customers.search.blade.php 人为的例子

<form method="post" action="{{ route('customers.search') }}">
    @csrf
    <div class="form-group">
        <label for="first_name" class="font-weight-bold">First Name</label>
        <div class="input-group">
            <div class="input-group-prepend">
                <select name="first_name['operator']" class="custom-select">
                    <option value="%">%</option>
                    <option value="=">=</option>
                    <option value="!=">!=</option>
                </select>
            </div>
            <input id="first_name" name="first_name['query']" type="text" class="form-control">
        </div>
    </div>
</form>

我有一个SearchCustomerRequest (FormRequest) 类,它动态构建验证规则。我已经把它转储了,所以你可以看看生成的规则是什么样子的:

search 方法下的 CustomersController 中,我执行以下操作以查看经过验证的请求数组的样子:

class CustomersController extends Controller
{

    // ...

    public function search(SearchCustomerRequest $searchCustomerRequest)
    {
        dd($searchCustomerRequest->validated());
    }

    // ...

}

为了测试这一点,在搜索表单中,我选择了firstname['operator']% 并输入了first_name['query']test 并提交了表单。

我得到以下响应(即空数组):

[]

所以,我转储了整个请求对象 $searchCustomerRequest 以查看参数包中的内容,这就是我所看到的:

如您所见,我的请求是有效的,我的规则也看起来正确,但验证似乎没有按预期工作。

你有什么想法吗?

【问题讨论】:

    标签: php laravel validation


    【解决方案1】:

    在您的 ParameterBag 中,first_name 属性 operatorquery 用单引号括起来。在您的 HTML 中,名称属性应排除单引号。例如:name="first_name[query]"

    【讨论】:

    • 谢谢@pablo。不错的收获。
    猜你喜欢
    • 2014-07-15
    • 2020-06-25
    • 2018-03-31
    • 2015-05-25
    • 2011-12-06
    • 2018-08-12
    • 2019-11-27
    • 2013-07-24
    • 2013-08-11
    相关资源
    最近更新 更多