【发布时间】:2018-12-31 11:42:08
【问题描述】:
根据 Laravel 5.6 的doc,
在 AJAX 请求期间使用 validate 方法时,Laravel 不会生成重定向响应。相反,Laravel 会生成一个 JSON 响应......这个 JSON 响应将发送一个 422 HTTP 状态码。
我真的看不出它是否返回 422。
这是我的实验的 sn-p。
public function registerWithEmail(Request $request)
{
request()->validate([
'name' => ['required'],
'email' => ['required', 'email', 'unique:customers'],
'password' => ['required', 'min:6'],
]);
return Customer::create([
'name' => $request->input('name'),
'email' => $request->input(email),
'password' => Hash::make($request->input(password)),
]);
}
当输入数据有效时,HTTP状态码为201。
但是,当它无效时,代码是302。
例如...
/** @test */
public function canNotRegisterCustomerWithSameEmail()
{
$response = $this->post('/api/register', [
'name' => 'Valid Input',
'email' => 'blah@example.com',
'password' => 'secret',
]);
$response2 = $this->post('/api/register', [
'name' => 'Duplicate Email i.e. invalid',
'email' => 'blah@example.com',
'password' => 'secret',
]);
$response->assertStatus(201);
//This is fine.
$response2->assertStatus(422);
//This fails, resulting in
//"Expected status code 422 but received 302."
$this->assertEquals(1, Customer::count());
//This is fine
}
你看到我做错了什么吗? 任何建议将不胜感激。
【问题讨论】:
-
这很明显。当它无效时,它会将您重定向到一个表单以进行一些修复。因此你得到
302。