Abhee
Abhee

Reputation: 340

REST API Request parameter validation Laravel

I am new to API with Laravel. I am trying to validate parameters sent into POST request through the Laravel's validate method.

Following data is the only parameter I am sending through the POST request. I want to validate device_id for uniqueness using Laravel's validate method.

data => {"device_id":"xxxxxx2C-9EA3-4FFB-B26D-E8E483xxxxxx","password":"ANVp285x","user_type":"1"} 

I can validate the only data parameter however there is no proper response or error message it's throwing exception. My main motive is to validate device_id, password and user_type.

Here's my controller's store

public function store(Request $request) {

    try {
        $result = $this->validate($request, [
            'data' => 'required',
//                'data.device_id' => 'required|unique:users|max:60',
//                'data.password' => 'required|min:6|confirmed',
//                'data.user_type' => 'required',
        ]);
        $user = new User;
//        Parameters from request
        $data = json_decode($request->data, TRUE);
        $user->device_id = $data['device_id'];
        $user->password = bcrypt($data['password']);
        $user->u_type = $data['user_type'];

//        Parameters to be generated
        $user->qr_code_image = "test_qr_code.png";
        $user->access_code = MyHelper::generate_access_code();
        $user->save();
        $user = User::find($user->id);
        $result = Fractal::item($user, new UserTransformer)->getArray();
        if (!empty($result['data'])) {
            $result['status'] = TRUE;
            $result['message'] = 'Success';
        } else {
            $result['status'] = FALSE;
            $result['message'] = 'Failed';
        }
    } catch (\Exception $e) {
        $result['status'] = FALSE;
        $result['message'] = 'Failed';
    }
    return $result;
}

Upvotes: 3

Views: 4344

Answers (2)

Mehrud
Mehrud

Reputation: 201

You can use Illuminate\Support\Facades\Validator to validate requests in your API:

 $validator = Validator::make($request->all(), [
        "device_id" => "required|unique:devices",
        "user_type" => "required",
        "password"  => "required",
    ]);

    if ($validator->fails()) {
        return response(
            $validator->errors(),
            400
        );
    }

Upvotes: 10

Abhee
Abhee

Reputation: 340

I found the solution I did this with below approch,

$data = $request->data;
        $data = json_decode($data, TRUE);
        $status = 200;
        $validator = Validator::make(
                        array(
                    "goal_title" => $data['goal_name'],
                    "family_id" => $data['family_id'],
                    "goal_frequency" => $data['goal_frequency'],
                        ), array(
                    "goal_title" => "required|regex:/(^[A-Za-z0-9 ]+$)+/|:family_goals",
                    "family_id" => "required",
                    "goal_frequency" => "required:goal_frequencies",
                        )
        );

Upvotes: 0

Related Questions