如果没有给出

时间:2016-01-27 10:18:15

标签: php html laravel-5.1

我使用的是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"

感谢您的帮助

3 个答案:

答案 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' 可以解决问题。

相关问题