场景
表单验证中如果校验失败的话,重定向到提交页面。 但是有些时候是返回值是消失掉的,
比如使用安神的laravel-ueditor package的时候,默认原来填写的数值是消失的。
这一点laravel提供了解决方案
解决
old从输入中获取value,下面是辅助函数的源码.
从代码可以看到是服务容器中取到了Request实例,然后调用了old方法
if (! function_exists('old')) {
/**
* Retrieve an old input item.
*
* @param string $key
* @param mixed $default
* @return mixed
*/
function old($key = null, $default = null)
{
return app('request')->old($key, $default);
}
}
原理
先说结论: 本质上是从session里面取旧input输入的数据
源码分析
真正的执行发生在哪里呢? Illuminate\Http\Request实例的trait Illuminate\Http\Concerns\InteractsWithFlashData old方法
/**
* Retrieve an old input item.
*
* @param string $key
* @param string|array|null $default
* @return string|array
*/
public function old($key = null, $default = null)
{
return $this->hasSession() ? $this->session()->getOldInput($key, $default) : $default;
}
所以呢 本质上是从session里面取旧input输入的数据 Illuminate\Session\Store
/**
* Get the requested item from the flashed input array.
*
* @param string $key
* @param mixed $default
* @return mixed
*/
public function getOldInput($key = null, $default = null)
{
return Arr::get($this->get('_old_input', []), $key, $default);
}
/**
* Get an item from the session.
*
* @param string $key
* @param mixed $default
* @return mixed
*/
public function get($key, $default = null)
{
return Arr::get($this->attributes, $key, $default);
}