请求类
class LoginRequest extends Request
{
public function authorize() {
return true;
}
public function rules() {
return [
'EmailAddress' => 'required',
'Password' => 'required',
];
}
public function messages() {
return [
"EmailAddress.required" => trans("login.RequiredEmailAddress"),
"Password.required" => trans("login.RequiredPassword")
];
}
}
路线
Route::post('/AuthenticateUser',
array(
'uses' => 'API\Login\apiLoginController@AuthenticateUser',
'as' => 'AuthenticateUser'
)
);
控制器操作方法
我有一个控制器,到目前为止我只为请求类做了验证输入参数。以下是行动方法
public function AuthenticateUser(LoginRequest $request) {
dd("Hello");
}
网址
localhost:85/Laravel/public/api/v1/AuthenticateUser
我正在使用Postman Chrome扩展程序来测试Url。因此,我们可以看到在Request类中,电子邮件地址和密码都是必需参数。
当我传递两个参数值时。没有问题,一切正常。当我将电子邮件地址值保持为空时...我收到404错误,这是屏幕截图。
如果没有给出电子邮件地址,我是否遗漏了一些东西来摆脱404错误?我期待输入电子邮件地址
的错误消息以下是我传递电子邮件和密码时的工作状态
答案 0 :(得分:1)
解决方案1:
我设法通过在请求中添加以下标头来摆脱404并返回422:
accept:application/json
这实际上不是Laravel中Taylor pointed out的错误,而是一种区分是否是AJAX / API请求的方法。
解决方案2:
或者,如果您不希望客户端指定该标头,则可以创建一个中间件,该中间件将在每个API请求上添加标头accept:application/json
。方法如下:
app/Http/Middleware/ForceJsonResponse.php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class ForceJsonResponse
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
$request->headers->set('Accept', 'application/json');
return $next($request);
}
}
/app/Http/Kernel.php
的{{1}}中,为新创建的中间件指定名称空间:$middlewareGroups.api
答案 1 :(得分:0)
最后通过更改下面的请求类来实现它。
class LoginRequest extends Request
{
public function wantsJson() {
return true;
}
public function authorize() {
return true;
}
public function rules() {
return [
'EmailAddress' => 'required',
'Password' => 'required',
];
}
public function messages() {
return [
"EmailAddress.required" => trans("login.RequiredEmailAddress"),
"Password.required" => trans("login.RequiredPassword")
];
}
}
刚刚添加下面的代码。
public function wantsJson() {
return true;
}
答案 2 :(得分:-2)
这是因为您直接在路由处理上进行验证,而不是通过NotFoundException进行匹配。您需要按原样将请求传递给控制器并执行:
$this->validate($request, [
'EmailAddress' => 'required|email',
'Password' => 'required',
]);