为什么我在 laravel 8 中添加验证后此代码会失败?
Why does this code Fail once i add validation in laravel 8?
我刚开始学习Laravel,我在这里有点迷路。此代码无需验证即可工作。
任务是建立一个用户注册的网站,将数据发布到现有的数据库中。正如我所指出的,没有验证它工作得很好但是当我添加验证时它失败了。
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Member;
class RegController extends Controller
{
public function store(Request $request) {
Member::create([
'fname' => $request ->fname,
'lname' => $request ->lname,
'gender' => $request ->gender,
'msisdn' => $request ->msisdn,
'email' => $request ->email,
'status' => $request ->mstatus,
'no_of_children' => $request ->kids,
'occupation' => $request ->profession,
'age' => $request ->age,
'bna' => $request ->bna,
'residence' => $request ->residence,
]);
return redirect('/members/register');
}
}
但这并不...
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Member;
class RegController extends Controller
{
public function store(Request $request) {
$request->validate([
'fname' => 'required',
'lname' => 'required',
'gender' => 'required',
'msisdn' => 'required|unique:members_tbl',
'email' => 'required|unique:members_tbl',
'status' => 'required',
'kids' => 'required',
'profession' => 'required',
'age' => 'required',
'bna' => 'required',
'residence' => 'required',
],
[
'fname.required' => 'Please Enter your First Name',
'lname.required' => 'Please Enter your Last Name',
'gender.required' => 'Please Enter your Gender',
'msisdn.required' => 'Please Enter your Phone Number',
'msisdn.unique' => 'A user has already registered with the phone Number',
'email.unique' => 'A user has already registered with the email',
'email.required' => 'Please enter a valid email address',
'status.required' => 'Please Let us know your marital status',
'kids.required' => 'Please fill out this field',
'profession.required' => 'Please fill out this field',
'age.required' => 'Please fill out this field',
'bna.required' => 'Please fill out this field',
'residence.required' => 'Please let us know where you live',
]);
Member::create([
'fname' => $request ->fname,
'lname' => $request ->lname,
'gender' => $request ->gender,
'msisdn' => $request ->msisdn,
'email' => $request ->email,
'status' => $request ->mstatus,
'no_of_children' => $request ->kids,
'occupation' => $request ->profession,
'age' => $request ->age,
'bna' => $request ->bna,
'residence' => $request ->residence,
]);
return redirect('/members/register');
}
}
我错过了什么?该代码在没有验证的情况下运行良好,但在添加验证时仅重定向回表单。
这是我的模特
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Member extends Model
{
use HasFactory;
public $timestamps = false;
protected $table="members_tbl";
protected $fillable =[
'fname',
'lname',
'gender',
'msisdn',
'email',
'status',
'no_of_children',
'occupation',
'age',
'bna',
'residence'
];
}
这是var_dump($request)
的结果
public 'request' =>
object(Symfony\Component\HttpFoundation\InputBag)[44]
protected 'parameters' =>
array (size=13)
'_token' => string 'DuNeITGaDF9K7eEMmU4HwX7nVLJUYDaZ1iYGT4dw' (length=40)
'fname' => string 'Joe' (length=3)
'lname' => string 'Peski' (length=5)
'gender' => string 'male' (length=4)
'msisdn' => string '254722000001' (length=12)
'email' => string 'joetry@hotmail.com' (length=18)
'residence' => string 'New Place' (length=9)
'age' => string 'teen' (length=4)
'bna' => string 'no' (length=2)
'mstatus' => string 'single' (length=6)
'kids' => string '4' (length=1)
'profession' => string 'IT' (length=2)
'submit' => string 'Submit' (length=6)
我相信它正在按预期工作。如果您不使用旧值重新填充字段,那么看起来页面只是被重定向了。您还需要在页面上显示验证消息。
https://laravel.com/docs/8.x/validation#repopulating-forms
https://laravel.com/docs/8.x/validation#quick-displaying-the-validation-errors
验证器没有读取您的 status
。确保您有此字段的默认值。
如果不需要status
,可以将required
改为nullable
,验证后创建默认值。
您需要 display an error message 才能知道错误是什么。
$errors = $validator->errors();
通常,当您使用 select 框、复选框或无法读取值或为空、null 的东西时,就会出现这种情况。
解决办法是加一个默认值或者加一个带默认值的隐藏字段
<input type="hidden" name="status" value="0">
<select name="status">
...
</select>
我刚开始学习Laravel,我在这里有点迷路。此代码无需验证即可工作。
任务是建立一个用户注册的网站,将数据发布到现有的数据库中。正如我所指出的,没有验证它工作得很好但是当我添加验证时它失败了。
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Member;
class RegController extends Controller
{
public function store(Request $request) {
Member::create([
'fname' => $request ->fname,
'lname' => $request ->lname,
'gender' => $request ->gender,
'msisdn' => $request ->msisdn,
'email' => $request ->email,
'status' => $request ->mstatus,
'no_of_children' => $request ->kids,
'occupation' => $request ->profession,
'age' => $request ->age,
'bna' => $request ->bna,
'residence' => $request ->residence,
]);
return redirect('/members/register');
}
}
但这并不...
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Member;
class RegController extends Controller
{
public function store(Request $request) {
$request->validate([
'fname' => 'required',
'lname' => 'required',
'gender' => 'required',
'msisdn' => 'required|unique:members_tbl',
'email' => 'required|unique:members_tbl',
'status' => 'required',
'kids' => 'required',
'profession' => 'required',
'age' => 'required',
'bna' => 'required',
'residence' => 'required',
],
[
'fname.required' => 'Please Enter your First Name',
'lname.required' => 'Please Enter your Last Name',
'gender.required' => 'Please Enter your Gender',
'msisdn.required' => 'Please Enter your Phone Number',
'msisdn.unique' => 'A user has already registered with the phone Number',
'email.unique' => 'A user has already registered with the email',
'email.required' => 'Please enter a valid email address',
'status.required' => 'Please Let us know your marital status',
'kids.required' => 'Please fill out this field',
'profession.required' => 'Please fill out this field',
'age.required' => 'Please fill out this field',
'bna.required' => 'Please fill out this field',
'residence.required' => 'Please let us know where you live',
]);
Member::create([
'fname' => $request ->fname,
'lname' => $request ->lname,
'gender' => $request ->gender,
'msisdn' => $request ->msisdn,
'email' => $request ->email,
'status' => $request ->mstatus,
'no_of_children' => $request ->kids,
'occupation' => $request ->profession,
'age' => $request ->age,
'bna' => $request ->bna,
'residence' => $request ->residence,
]);
return redirect('/members/register');
}
}
我错过了什么?该代码在没有验证的情况下运行良好,但在添加验证时仅重定向回表单。
这是我的模特
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Member extends Model
{
use HasFactory;
public $timestamps = false;
protected $table="members_tbl";
protected $fillable =[
'fname',
'lname',
'gender',
'msisdn',
'email',
'status',
'no_of_children',
'occupation',
'age',
'bna',
'residence'
];
}
这是var_dump($request)
的结果 public 'request' =>
object(Symfony\Component\HttpFoundation\InputBag)[44]
protected 'parameters' =>
array (size=13)
'_token' => string 'DuNeITGaDF9K7eEMmU4HwX7nVLJUYDaZ1iYGT4dw' (length=40)
'fname' => string 'Joe' (length=3)
'lname' => string 'Peski' (length=5)
'gender' => string 'male' (length=4)
'msisdn' => string '254722000001' (length=12)
'email' => string 'joetry@hotmail.com' (length=18)
'residence' => string 'New Place' (length=9)
'age' => string 'teen' (length=4)
'bna' => string 'no' (length=2)
'mstatus' => string 'single' (length=6)
'kids' => string '4' (length=1)
'profession' => string 'IT' (length=2)
'submit' => string 'Submit' (length=6)
我相信它正在按预期工作。如果您不使用旧值重新填充字段,那么看起来页面只是被重定向了。您还需要在页面上显示验证消息。
https://laravel.com/docs/8.x/validation#repopulating-forms
https://laravel.com/docs/8.x/validation#quick-displaying-the-validation-errors
验证器没有读取您的 status
。确保您有此字段的默认值。
如果不需要status
,可以将required
改为nullable
,验证后创建默认值。
您需要 display an error message 才能知道错误是什么。
$errors = $validator->errors();
通常,当您使用 select 框、复选框或无法读取值或为空、null 的东西时,就会出现这种情况。
解决办法是加一个默认值或者加一个带默认值的隐藏字段
<input type="hidden" name="status" value="0">
<select name="status">
...
</select>