我是Laravel世界的新手,我有一个问题,到目前为止我无法解决。
我的问题是:
验证失败后,如何在控制器的create()
函数中访问提交的值?
这就是我所拥有的:
create()
和store()
等。以下是一些代码:
//PostsController
public function create()
{
//Here I need to get the inputs
return view('posts.create');
}
public function store(Requests\PostsRequest $request)
{
//store actions
}
我创建了PostsRequest类,它有一些规则,如:
public function rules(){
$rules = [
'category_id'=>'required',
'name'=>'required|min:3',
'description'=>'required'
];
return $rules;
}
如果一切正常,则条目已存储到数据库中,但是当验证失败时,它会在create()
中加载一些验证消息。
我需要在表单中加载所选类别的祖先,这应该通过知道category_id
元素的提交值来实现。
到目前为止我已尝试过:
尝试在create中添加参数:
public function create(Requests\PostsRequest $request){...}
但它进入了无限循环。我明白为什么因为控制器的资源定义而且它会思考"这是它的存储方法。
尝试打印外观Input::all()
,但它是空的
试图制作:
public function create(){
$request = new \Request();
//print $request
}
但它不起作用,我认为这不是正确的方法。
因此,任何想法如何在控制器中获取这些值都将受到高度赞赏。
答案 0 :(得分:0)
您应该能够使用Input :: old()
获取数据在你的观点中你可以做到
<input type="text" name="name" value="{{ old('name') }}" />
如果已发送,则会从名称中提供值。
另见最近的问题/答案; Laravel 5 - Validation error on form doesn't re-enter user input
答案 1 :(得分:0)
如果您使用{!! Form::open() !!}
(或Form::model
),则会再次加载所有内容(重定向后)。 Laravel自动捕获&#34;输入::旧&#34;值。
来自:FormBuilder.php(照亮/ html包 - 版本5.0)
/**
* Get the value that should be assigned to the field.
*
* @param string $name
* @param string $value
* @return string
*/
public function getValueAttribute($name, $value = null)
{
if (is_null($name)) return $value;
if ( ! is_null($this->old($name)))
{
return $this->old($name);
}
if ( ! is_null($value)) return $value;
if (isset($this->model))
{
return $this->getModelValueAttribute($name);
}
}
如果您不想使用illuminate / html,只需添加您的value属性:
Input::old('input_name')
如果您想获得请求。只需添加到您的create方法即可。
public function create(Request $request){
$data = $request->all(); //or whatever you want..
}