已解决:Laravel 6 如果总输入大于 85,则无法获取验证数组输入(具有相同名称的输入)与其他输入的错误消息
Solved: Laravel 6 Can't get error message of validation of array input (input with same name) with other inputs if total input are greater than 85
我在 windows 7 (x64) wamp 服务器 (v 3.2.2.2) 上使用 laravel 6.10。
我正在验证 1 个数组输入和 2 个文本输入。如果数组大小等于或小于 84,我会在 blade 中收到验证错误消息。如果我将数组大小增加到 85。我没有收到任何错误消息。
如果输入无效,验证功能会重定向回来,但如果数组大小大于 85,则不会显示错误消息。如果输入有效,则没有问题
这里是blade
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div class="flex-center position-ref full-height">
<form method="post" action="{{url('form')}}" id="infoForm" >
@csrf
<input type="text" class="form-control" name="name" placeholder="Section A" value="{{ old('name') }}">
<input type="text" class="form-control" name="king" placeholder="Section A" value="{{ old('king') }}">
@for($i=0;$i<85;$i++)
<input type="hidden" name="test[]" value="{{$i}}">
@endfor
<button type="submit">Submit</button>
</form>
</div>
控制器
public function store(Request $request)
{
$validatedData = $request->validate([
'name' => 'bail|required',
'king' => 'bail|required',
'test.*' => 'required'
]);
dd('test');
return redirect('form')->with('success', 'Information has been added');
}
@dd(session()->all()) 如果数组大小小于 84
,结果为 blade
array:4 [▼
"_token" => "s3kZaeGmEI9C7lNcH8mDLnzU0KNcXkO9luPeIzQa"
"_flash" => array:2 [▶]
"_old_input" => array:4 [▶]
"errors" => Illuminate\Support\ViewErrorBag {#246 ▶}
]
@dd(session()->all()) 如果数组大小大于 84
,结果为 blade
array:3 [▼
"_token" => "HjFH5QBSYaqnBAx8QG6PEGiIObueWYr6AjpVPolZ"
"_previous" => array:1 [▶]
"_flash" => array:2 [▶]
]
这是与网络服务器有关还是与 laravel 有关的问题。请帮助我解决它。
这是 github 上的项目
https://github.com/mhabib555/LaravelMultipleInputWithSameNameValidation
我认为问题可能出在您的 php.ini
中为 post_max_size 设置的值。确保用更高的值更新它。
也代替:
'test.*' => 'required'
您可能还想添加:
'test' => ['array']
或者也许
'test' => ['array', 'required']
如果测试数组中应该至少有 1 个项目以确保 test
是一个数组。
您在哪里验证最大数组大小?
一定要写
reproduced issue with array size 500
检查你有什么会话驱动程序,如果它是一个 cookie,因为默认是在新项目上,将它添加到你的 .env 文件
SESSION_DRIVER=文件
我在 windows 7 (x64) wamp 服务器 (v 3.2.2.2) 上使用 laravel 6.10。
我正在验证 1 个数组输入和 2 个文本输入。如果数组大小等于或小于 84,我会在 blade 中收到验证错误消息。如果我将数组大小增加到 85。我没有收到任何错误消息。
如果输入无效,验证功能会重定向回来,但如果数组大小大于 85,则不会显示错误消息。如果输入有效,则没有问题
这里是blade
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div class="flex-center position-ref full-height">
<form method="post" action="{{url('form')}}" id="infoForm" >
@csrf
<input type="text" class="form-control" name="name" placeholder="Section A" value="{{ old('name') }}">
<input type="text" class="form-control" name="king" placeholder="Section A" value="{{ old('king') }}">
@for($i=0;$i<85;$i++)
<input type="hidden" name="test[]" value="{{$i}}">
@endfor
<button type="submit">Submit</button>
</form>
</div>
控制器
public function store(Request $request)
{
$validatedData = $request->validate([
'name' => 'bail|required',
'king' => 'bail|required',
'test.*' => 'required'
]);
dd('test');
return redirect('form')->with('success', 'Information has been added');
}
@dd(session()->all()) 如果数组大小小于 84
,结果为 bladearray:4 [▼
"_token" => "s3kZaeGmEI9C7lNcH8mDLnzU0KNcXkO9luPeIzQa"
"_flash" => array:2 [▶]
"_old_input" => array:4 [▶]
"errors" => Illuminate\Support\ViewErrorBag {#246 ▶}
]
@dd(session()->all()) 如果数组大小大于 84
,结果为 bladearray:3 [▼
"_token" => "HjFH5QBSYaqnBAx8QG6PEGiIObueWYr6AjpVPolZ"
"_previous" => array:1 [▶]
"_flash" => array:2 [▶]
]
这是与网络服务器有关还是与 laravel 有关的问题。请帮助我解决它。 这是 github 上的项目 https://github.com/mhabib555/LaravelMultipleInputWithSameNameValidation
我认为问题可能出在您的 php.ini
中为 post_max_size 设置的值。确保用更高的值更新它。
也代替:
'test.*' => 'required'
您可能还想添加:
'test' => ['array']
或者也许
'test' => ['array', 'required']
如果测试数组中应该至少有 1 个项目以确保 test
是一个数组。
您在哪里验证最大数组大小? 一定要写
reproduced issue with array size 500
检查你有什么会话驱动程序,如果它是一个 cookie,因为默认是在新项目上,将它添加到你的 .env 文件
SESSION_DRIVER=文件