php Laravel old()输入值在表单验证后始终返回Null

i2byvkas  于 2023-01-12  发布在  PHP
关注(0)|答案(1)|浏览(190)

我有一个基本表单(可供auth用户使用)

<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());
}

我的会话服务器是文件:

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

问题是**old('name ')**在Blade中始终返回NULL,并且如果验证失败,它不会填充表单值。
问题出在哪里?(注:登录表单工作正常)

8yparm6h

8yparm6h1#

此问题可能是由于您使用的是文件会话驱动程序。文件会话驱动程序将会话数据存储在文件系统中,当用户离开页面或关闭浏览器时,其会话数据将丢失。在这种情况下,刀片模板中的旧输入功能无法从会话中检索以前输入的数据,因为会话数据已丢失。
要解决这个问题,你可以在.env文件中将会话驱动程序改为cookie、database或memcached/redis,这些驱动程序会将会话数据作为cookie存储在用户的浏览器上或存储在数据库中,从而允许旧的输入功能在用户离开页面或关闭浏览器后检索以前输入的数据。
您还应该确保表单在适当的地方包含旧的输入函数,这样,如果验证失败,表单将使用以前输入的数据重新填充。
另一个原因可能与CSRF令牌问题有关。由于您的表单包含@csrf指令,您需要确保在config/session.php文件中设置了CSRF_TOKEN变量,或者如果您在.env文件中定义了该变量,则需要确保该值是正确的。
最后,确保您使用POST方法提交表单,因为旧的输入函数只从以前的POST请求中检索数据,所以如果您正在执行GET请求,该函数将不会从以前的请求中检索数据。

相关问题