验证 'required' 不适用于更新 laravel6 中的表单
Validate 'required' doesn't work for updating form in laravel6
我制作了一个用于编辑和更新用户名的表格。
表格工作正常。
但是,如果将用户名字段清空并提交,
验证函数 "required" 不会关闭并收到错误:
"SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'name'
cannot be null"
我找不到验证不起作用的原因。
这是我的代码。
UsernameController.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']]);
试试下面的方法
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'];
我制作了一个用于编辑和更新用户名的表格。 表格工作正常。
但是,如果将用户名字段清空并提交, 验证函数 "required" 不会关闭并收到错误:
"SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'name' cannot be null"
我找不到验证不起作用的原因。 这是我的代码。
UsernameController.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']]);
试试下面的方法
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'];