Laravel old()输入值在表单验证后总是返回Null



我有一个基本的表单(可供授权用户使用)

<form method="POST" action="/admin/insert">
@csrf  
<div class="form-group">
<label>{{ __($cv->name) }}</label>
<input type="text" name="name" class="form-control @error($ck) is-invalid @enderror"  value="{{ old('name') }}" >
</div>
<button type="submit" class="btn btn-primary me-2">{{ __('Submit') }}</button>
</form>

出于测试目的,我故意使控制器中的表单验证失败。

if ($validator->fails()) {
return back()->withErrors($validator)
->withInput($request->input());
}

我的会话地址是file:

driver' => env('SESSION_DRIVER', 'file'),

问题是old('name')在blade中总是返回NULL,并且如果验证失败则不填充表单值。

问题在哪里?(注:登录表单工作正常)

这个问题可能是由于您正在使用文件会话驱动程序引起的。文件会话驱动程序将会话数据存储在文件系统中,当用户离开页面或关闭浏览器时,会话数据将丢失。在这种情况下,刀片模板中的旧输入函数无法从会话中检索以前输入的数据,因为会话数据已经丢失。

要解决这个问题,你可以在你的。env文件中将会话驱动程序更改为cookie, database或memcached/redis。这些驱动程序将会话数据以cookie或数据库的形式存储在用户的浏览器中,允许旧的输入函数在用户离开页面或关闭浏览器后检索以前输入的数据。

您还应该确保表单在适当的地方包含旧的输入函数,这样如果验证失败,表单将重新填充以前输入的数据。

问题的另一个原因可能与CSRF令牌问题有关。由于您的表单包含@csrf指令,您需要确保在config/session.php文件中设置了CSRF_TOKEN变量,或者如果您在.env文件中定义了变量,则该值是正确的。

最后,确保使用POST方法提交表单,因为旧的输入函数只从前一个POST请求中检索数据,所以如果您正在执行GET请求,该函数将不会从前一个请求中检索数据。

最新更新