I need to use my custom validation rule for validating API requests.
Request Class:
This is my request validation rule.
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class LoginRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'username' => 'required',
'password' => 'required'
];
}
public function messages()
{
return [
'username.required' => 'The Username field is required',
'password.required' => 'The Password field is required'
];
}
}
API Controller:
This is my API controller and method.
use Illuminate\Http\Request;
use App\Http\Controllers\API\BaseController as BaseController;
use Illuminate\Support\Facades\Auth;
use App\Http\Requests\LoginRequest;
class LoginController extends BaseController
{
public function login(LoginRequest $request)
{
print_r($validatorMsg);
die();
}
}
Unable to get error message.
Your code looks good. A JSON
response will be returned automatically for an AJAX call. Remember that you can't reach the controller method if validation errors occur, so in your case, print_r($validatorMsg);
will not be executed if any validation errors occur.
Instead check the response returned for your request. In axios, you can get the errors like this:
axios.post('/your-route', data).then((res) => {
console.log('Request succeeded.');
}).catch((err) => {
console.log(err.response.data.errors);
});
This is just an example. You should check the appropriate response returned for your API call to catch the resulted errors.
use Illuminate\Support\Facades\Validator;
use Illuminate\Http\JsonResponse;
public function login(LoginRequest $request)
{
$validator = Validator::make($request->all(), [
'user_name' => 'required',
'password' => 'required',
]);
if ($validator->fails()) {
$message = $validator->errors()->first();
$errors=$validator->errors();
$code='200';
$response = array(
'success' => false,
'message' => $message,
"errors" => $errors
);
return new JsonResponse($response, $code);
}
}
guys, I resolved the problem this is the solution:
public function login(Request $request)
{
$LoginRequest = New LoginRequest;
$validator = Validator::make($request->all(), $LoginRequest->rules(),$LoginRequest->messages());
if($validator->fails()){
return response()->json($validator->errors(), 422);
}
}
In your controller you can check if request has validation errors, if yes you can send json response with you validation errors. Try code bellow
public function login (Request $request) {
if(!$request->validated()) {
return response()->json($request->validator->messages());
}
}
In order to display error messages in your API's, use response()
method in your LoginRequest
class, so you always return JSON. Something like this:
public function response(array $errors)
{
// Always return JSON.
return response()->json($errors, 422);
}
Now try to submit empty form, and you should be able to view the error message.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.