Search code examples
phplaravelexceptionpython-requestshttpresponse

Is there a way to manipulate response from request made by php artisan make:request?


I have a request made by Laravel wit FormRequest extend and with this rules and messages:

public function rules()
{
    return [
        'login' => 'required',
        'password' => 'required',
    ];
}

public function messages()
{
    return [
        'login:required' => 'Login is required',
        'password:required' => 'Password is required'
    ];
}

Now I receive this kind of response:

{
    "message": "The given data was invalid.",
    "errors": {
        "login": [
            "The login field is required."
        ],
        "password": [
            "The password field is required."
        ]
    }
}

But I want something like this:

{
    "status": false,
    "validator": true,
    "msg": {
        "e": {
            "login": [
                "The login field is required."
            ],
            "password": [
                "The password field is required."
            ]
        },
        "type": "error"
    }
}

Is this possible?

Because now I use this code to get this:

$item = Validator::make($request->all(), [
    'login' => 'required',
    'password' => 'required',
]);

if ($item->fails())
    return response()->json([
        'status' => false,
        'validator' => true,
        'msg' => [
            'e' => $item->messages(),
            'type' => 'error'
        ],
    ]);

But I want to make this from Request made by larave (php artisan make:request)


Solution

  • Yes you can do it. Add this method to your Form Request class:

    use Illuminate\Contracts\Validation\Validator;
    use Illuminate\Http\Exceptions\HttpResponseException;
    
    // ...
    
    protected function failedValidation(Validator $validator)
    {
        $data = [
            'status'    => false,
            'validator' => true,
            'msg'       => [
                'e'    => $validator->errors(),
                'type' => 'error',
            ],
        ];
    
        throw new HttpResponseException(response()->json($data, 422));
    }