1<?php
2
3namespace Illuminate\Foundation\Validation;
4
5use Illuminate\Contracts\Validation\Factory;
6use Illuminate\Http\Request;
7use Illuminate\Validation\ValidationException;
8
9trait ValidatesRequests
10{
11    /**
12     * Run the validation routine against the given validator.
13     *
14     * @param  \Illuminate\Contracts\Validation\Validator|array  $validator
15     * @param  \Illuminate\Http\Request|null  $request
16     * @return array
17     *
18     * @throws \Illuminate\Validation\ValidationException
19     */
20    public function validateWith($validator, Request $request = null)
21    {
22        $request = $request ?: request();
23
24        if (is_array($validator)) {
25            $validator = $this->getValidationFactory()->make($request->all(), $validator);
26        }
27
28        return $validator->validate();
29    }
30
31    /**
32     * Validate the given request with the given rules.
33     *
34     * @param  \Illuminate\Http\Request  $request
35     * @param  array  $rules
36     * @param  array  $messages
37     * @param  array  $customAttributes
38     * @return array
39     *
40     * @throws \Illuminate\Validation\ValidationException
41     */
42    public function validate(Request $request, array $rules,
43                             array $messages = [], array $customAttributes = [])
44    {
45        return $this->getValidationFactory()->make(
46            $request->all(), $rules, $messages, $customAttributes
47        )->validate();
48    }
49
50    /**
51     * Validate the given request with the given rules.
52     *
53     * @param  string  $errorBag
54     * @param  \Illuminate\Http\Request  $request
55     * @param  array  $rules
56     * @param  array  $messages
57     * @param  array  $customAttributes
58     * @return array
59     *
60     * @throws \Illuminate\Validation\ValidationException
61     */
62    public function validateWithBag($errorBag, Request $request, array $rules,
63                                    array $messages = [], array $customAttributes = [])
64    {
65        try {
66            return $this->validate($request, $rules, $messages, $customAttributes);
67        } catch (ValidationException $e) {
68            $e->errorBag = $errorBag;
69
70            throw $e;
71        }
72    }
73
74    /**
75     * Get a validation factory instance.
76     *
77     * @return \Illuminate\Contracts\Validation\Factory
78     */
79    protected function getValidationFactory()
80    {
81        return app(Factory::class);
82    }
83}
84