How to check if validation fail with form-request?

Posted 11 months ago by malhayek

I am trying to write a CRUD for an API. However, when the validation fail, instead of redirecting the user to the home page, I want to return json based response with the errors.

I am able to do that using the following code

    public function store(Request $request)
    {
        try {
            $validator = $this->getValidator($request);

            if ($validator->fails()) {
                return $this->errorResponse($validator->errors()->all());
            }
            
            $asset = Asset::create($request->all());

            return $this->successResponse(
                'Asset was successfully added!',
                $this->transform($asset)
            );
        } catch (Exception $exception) {
            return $this->errorResponse('Unexpected error occurred while trying to process your request!');
        }
    }

    /**
     * Gets a new validator instance with the defined rules.
     *
     * @param Illuminate\Http\Request $request
     *
     * @return Illuminate\Support\Facades\Validator
     */
    protected function getValidator(Request $request)
    {
        $rules = [
            'name' => 'required|string|min:1|max:255',
            'category_id' => 'required',
            'cost' => 'required|numeric|min:-9999999.999|max:9999999.999',
            'purchased_at' => 'nullable|string|min:0|max:255',
            'notes' => 'nullable|string|min:0|max:1000',
            'picture' => 'nullable|string|min:0|max:255',
        ];

        return Validator::make($request->all(), $rules);
    }

Now, I like to extract some of my code into a form-request to clean up my controller little more. I like to change my code to something like the code below.

    public function store(AssetsFormRequest $request)
    {
        try {
            if ($request->fails()) {
                return $this->errorResponse($request->errors()->all());
            }            
            $asset = Asset::create($request->all());

            return $this->successResponse(
                'Asset was successfully added!',
                $this->transform($asset)
            );
        } catch (Exception $exception) {
            return $this->errorResponse('Unexpected error occurred while trying to process your request!');
        }
    }

As you can probably tell that $request->fails() and $request->errors()->all() is not going to work. How can I check if the request failed and then how can I get the errors out of the form-request?

For your reference, here is how my AssetsFormRequest class look like

    <?php
    
    namespace App\Http\Requests;
    
    use Illuminate\Foundation\Http\FormRequest;
    
    class AssetsFormRequest extends FormRequest
    {
        /**
         * Determine if the user is authorized to make this request.
         *
         * @return bool
         */
        public function authorize()
        {
            return true;
        }
    
        /**
         * Get the validation rules that apply to the request.
         *
         * @return array
         */
        public function rules()
        {
            return [
                'name' => 'required|string|min:1|max:255',
                'category_id' => 'required',
                'cost' => 'required|numeric|min:-9999999.999|max:9999999.999',
                'purchased_at' => 'nullable|string|min:0|max:255',
                'notes' => 'nullable|string|min:0|max:1000',
            ];
        }
    }

Please sign in or create an account to participate in this conversation.

Laracasts Mascot

Hi, Have We Met Yet?

Did you know that, in addition to the forum, Laracasts includes well over 1000 lessons on modern web development? All for the price of one lunch out per month.

Sign Me Up

Channels

Reply to

Use Markdown with GitHub-flavored code blocks.