【问题标题】:Controller method does not updates data控制器方法不更新数据
【发布时间】:2021-06-01 21:56:00
【问题描述】:

我有这个表单组:

<select class="form-control" id="sel1" name="status">
   @if((auth()->user()->two_factor_auth) === 'off')
   <option value="off">Off</option>
   <option value="sms">SMS</option>
   @else
   <option value="off">Off</option>
   <option value="sms">SMS</option>
   @endif
</select>

作为操作,我将此添加到ProfileController 的方法submit 中:

public function submit(Request $request)
{
    if($data['status'] === 'off'){
        $request->user()->update([
            'two_factor_auth' => 'off'
        ]);
    }else{...}
}

然后在 DB,users 表中,我添加了two_factor_auth 列,默认设置为sms。

所以如果用户选择off,它应该更新列并设置off。但现在的问题是它并没有以某种方式做到这一点......

那么这里出了什么问题?我该如何解决这个问题?

非常感谢你们的任何想法或建议......

提前致谢。

【问题讨论】:

  • 旁注,您在if 和else 语句中具有相同的&lt;option&gt;s,这意味着如所写,目前没有意义。其中之一应该是on 吗?您还可以将SMS 选项从@if 中移出,这样您就不必写两次了。
  • 接下来,$data['status'] 不是您访问它的方式;这是$request-&gt;input('status')。目前,$data 未在您发布的代码中定义。

标签: php laravel laravel-8


【解决方案1】:

您的 html 需要替换,将 selected 属性添加到您在 DB/object 中找到的选项中

<select class="form-control" id="sel1" name="status">
   @if((auth()->user()->two_factor_auth) === 'off')
   <option selected value="off">Off</option>
   <option value="sms">SMS</option>
   @else
   <option value="off">Off</option>
   <option selected value="sms">SMS</option>
   @endif
</select>

你也可以只用两行

@php
$isOff = auth()->user()->two_factor_auth === 'off';
@endphp
<select class="form-control" id="sel1" name="status">
   <option @if($isOff) selected @endif value="off">Off</option>
   <option @if(!$isOff) selected @endif value="sms">SMS</option>
</select>

至于控制器,可能你没有贴出所有代码,但试试这个

public function submit(Request $request)
{
    //you should add validation rules here
    $user = auth()->user();
    $user->status = $request->input('status', 'sms');//second attribute is for default
    //you can add other attributes to update here 
    $user->save();
}

【讨论】:

  • 替代语法;我发现 &lt;option {{ $isOff ? 'selected' : '' }}&gt; 或 &lt;option {{ !isOff ? 'selected' : '' }}&gt; 比内联 @if ... @endif 更干净(虽然两者都工作得很好)
  • @TimLewis 它做同样的事情,但使用 @if 删除了 else 语句。
  • 啊,是的,很公平;并且三元的: '' 部分在这里没有任何作用。就像我说的,要么要么都可以:)
猜你喜欢
  • 1970-01-01
  • 2013-12-20
  • 1970-01-01
  • 2018-04-22
  • 1970-01-01
  • 2021-04-20
  • 1970-01-01
  • 1970-01-01
  • 2015-03-03
相关资源
最近更新 更多