【问题标题】:Validate 'required' doesn't work for updating form in laravel6验证“必需”不适用于更新 laravel6 中的表单
【发布时间】:2020-04-15 04:22:43
【问题描述】:

我制作了一个用于编辑和更新用户名的表单。 表单工作正常。

但是,如果将用户名字段设为空并提交, 验证功能“必需”不会关闭并收到错误:

"SQLSTATE[23000]: 完整性约束违规:1048 列 'name' 不能为空”

我找不到验证不起作用的原因。 这是我的代码。

用户名控制器.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use App\User;

class UsernameController extends Controller
{
    public function edit($id)
    {
        $data = User::findOrFail($id);
    return view('username.edit')->with('form',$data);
    }


    public function update(Request $request, $id)
    {

        $this->validate($request, ['name' => 'required']);
        $form = new User;
        $form = User::findOrFail($id);
        $form->name = $request->name;
        unset($form['_token']);
        $form->save();

        return redirect('/home/mypage')->with('status','Updated!');
    }
}

edit.blade.php

<form action="/username/{{$form->id}}" method="post">
@csrf
@method('PUT')
<input type="hidden" name="id" value="{{$form->id}}">

<p>Username<br>
<input type="text" name="name" value="{{$form->name}}"></p>

@error('name')
<p><span style="color:red;">{{$message}}</span></p>
@enderror

<p><input type="submit" value="Update"></p>

</form>

web.php

Route::resource('username','UsernameController',['only' => ['edit', 'update']]);

【问题讨论】:

  • 尝试把这个$this-&gt;validate($request, ['name' =&gt; 'required']);改成这个$this-&gt;validate($request-&gt;all(), ['name' =&gt; 'required']);
  • ` $this->validate(request(), ['name' => 'required']);` 试着告诉我们
  • 不幸的是,这两个代码都不起作用并给了我同样的错误。

标签: laravel requiredfieldvalidator


【解决方案1】:

改用以下方法

use use Illuminate\Support\Facades\Validator;
//...
$validator = Validator::make($request->all(), [
     'name' => 'required',
]);

if ($validator->fails()) {
     return redirect()->back()
         ->withErrors($validator)
         ->withInput();
}

编辑

您还应该定义您希望哪些模型属性可以批量分配。您可以使用模型上的$fillable 属性来执行此操作。

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = ['name'];

【讨论】:

  • 感谢您的回复。不幸的是,它不起作用并给了我同样的错误。
  • 我一直在做protected $fillable = ['name', 'email', 'password'];,所以如果输入字段是文本,提交没有问题。但是,如果输入字段为空并提交,验证不会关闭并出现错误。
  • 嗯,你试过Validator 门面吗?检查上面的代码
  • 非常感谢您的帮助。现在我发现出了什么问题。我已经复制了控制器文件进行备份。这个复制的文件弄乱了路由。现在使用您的方法可以正常工作。
猜你喜欢
  • 1970-01-01
  • 2015-02-12
  • 2021-07-20
  • 2021-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
相关资源
最近更新 更多