我使用的是Laravel 5.1,我需要在字段中没有给出默认值。
所以视图如下:
<form name="search" method="POST" action="/s">
Country<input name="country" type="text">
Field<input name="field" type="text">
<button type="submit" type="button">Search</button>
<input name="_token" value="{{ csrf_token() }}" type="hidden">
</form>
控制器看起来像:
public function extendedPost(Request $request){
$data = $request->all();
$request->input('field', 'Random');
dd($data);
}
在Laravel 5.1 Documentation中,我们有:
您可以将默认值作为输入的第二个参数传递 方法。如果请求的输入值为,则返回此值 请求中没有出现:
$name = $request->input('name', 'Sally');
所以当我在&#34; Field&#34;我有:
array:21 [▼
"country" => ""
"field" => "dddd"
"_token" => "XeMi"
]
但当&#34; Field&#34;是空的我有
array:21 [▼
"country" => ""
"field" => ""
"_token" => "XeMi"
]
而不是
array:21 [▼
"country" => ""
"field" => "Random"
"_token" => "XeMi"
感谢您的帮助
答案 0 :(得分:0)
函数input
不更新$request
它只会检查Request中是否存在给定属性,如果是,它将返回第二个参数中传递的默认值,尝试使用{{1}检查请求中是否存在该属性,然后手动更新请求:
has()
注意:如果值存在且不是空字符串,if( $request->has('field')) {
$request->field = 'Random';
}
方法将返回has
。
希望这有帮助。
答案 1 :(得分:0)
这里的回答很晚,但希望仍然有用。
您可以将默认值作为第二个参数传递给输入 方法。如果请求的输入值是 请求中不存在:
这意味着如果不存在输入,将使用第二个参数。但是,如果这来自表单中的可选字段,则表示存在输入-带有空字符串的值。
那是
$name = $request->input('name', 'Sally');
当表单没有提交名称字段时,将返回“ Sally”,但如果用户将名称字段留为空白,则将返回“”。
如果我们想在字段为空白时使用'Sally'的值,则可以按照Zakaria的建议进行操作并使用:
if( $request->has('field')) {
$request->field = 'Random';
}
...但是如果您有很多需要检查的字段,那将很快变得混乱。
另一个选择是使用三元运算符。像这样:
$yourValue = $request->has('field') ? $request->input('field') : 'Random';
$yourValue2 = $request->has('country') ? $request->input('country') : 'Australia';
这很麻烦,但允许您将每个值写在自己的行上。
您的$ request变量仍然不会显示这些字段。如果您打算多次检查该字段,则可以像在Zakaria的答案中那样为$ request分配一个值,也可以在将要检查的变量中设置它。
在许多情况下,您希望将输入分配给某些对象,在这种情况下,可以在分配输入时直接使用三元运算符。
例如,如果我们要为当前用户设置国家/地区字段,则可以使用:
$user->country = $request->has('country') ? $request->input('country') : 'Unspecified';
通常,绕过该问题比较容易。其他一些选项可能是:
使用可选的select下拉列表时,可以将“空”默认值设置为在提交时具有一个值。例如,在国家/地区下拉列表中,您可以以以下内容开头:
<select name="country">
<option value="unspecified" selected="selected></option>
<option>Australia</option>
<option>Brazil</option>
<option>Canada</option>
</select>
根据表单中的要求设置字段。并使用请求验证来验证是否已提交值。
$this->validate(request(), [
'field' => 'required',
'country' => 'required:min:3',
]);
这将返回带有$ errors集合的表单,该集合可用于向用户显示消息。首先,在您需要使用输入时,验证已经检查了他们是否提交了东西。
答案 2 :(得分:0)
就我而言,request()->country = 'default'
或 $request->country = 'default';
不起作用,因为验证规则仍然会为缺失的字段抛出错误。但是 $request['country'] = 'default'
可以解决问题。