在我的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
,并提交了表单。 / p>
我收到以下响应(即空数组):
[]
因此,我转储了整个请求对象$searchCustomerRequest
来查看参数包中的内容,这就是我看到的内容:
如您所见,我的请求是有效的,我的规则也看起来正确,但是验证似乎没有按预期工作。
任何想法在这里可能出什么问题吗?
答案 0 :(得分:3)
在您的ParameterBag
中,first_name
属性operator
和query
用单引号引起来。在HTML中,name属性应排除单引号。例如:name="first_name[query]"