如何在 Laravel 5.1 中没有给出 Request 时将 Request 设置为默认值

问题描述 投票:0回答:3
php html laravel-5.1
3个回答
3
投票

这里的答案很晚,但希望仍然有用的澄清。

您可以将默认值作为第二个参数传递给输入 方法。如果请求的输入值为 未出现在请求中:

这意味着如果输入不存在,将使用第二个参数。但如果这来自表单中的可选字段,则存在输入 - 且值为空字符串。

这意味着

$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 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 集合的表单,该集合可用于向用户显示消息。把它放在第一位,当您需要使用输入时,验证已经检查了他们提交的内容。


1
投票

函数

input
不会更新
$request
,它只会检查给定的属性是否在请求中不存在,如果是,它将返回第二个参数中传递的默认值,尝试使用
has()
来检查该属性是否存在在请求中,然后手动更新请求:

if( $request->has('field')) {
    $request->field = 'Random';
}

注意: 如果该值存在且不是空字符串,则

has
方法将返回
true

希望这有帮助。


1
投票

在我的例子中,

request()->country = 'default'
$request->country = 'default';
不起作用,因为验证规则仍然会抛出缺失字段的错误。但是
$request['country'] = 'default'
就可以了。

© www.soinside.com 2019 - 2024. All rights reserved.