Laravel FormRequest验证规则未按预期工作

时间:2019-09-01 22:14:22

标签: php laravel validation

在我的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)类,该类可以动态构建验证规则。我已经将其丢弃,因此您可以看到生成的规则是什么样的:

enter image description here

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

class CustomersController extends Controller
{

    // ...

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

    // ...

}

为了对此进行测试,我在搜索表单中选择了firstname['operator']%,并在first_name['query']中键入了test,并提交了表单。 / p>

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

  

[]

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

enter image description here

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

任何想法在这里可能出什么问题吗?

1 个答案:

答案 0 :(得分:3)

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