├── composer.json ├── readme.md └── src ├── AutoValidationProvider.php ├── Traits └── AutoValidation.php └── config └── validation.php /composer.json: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "name": "bekusc/laravel-auto-validation", 4 | "description": "", 5 | "authors": [ 6 | { 7 | "name": "Rei Bengu", 8 | "email": "bengusc@gmail.com" 9 | } 10 | ], 11 | "autoload": { 12 | "psr-4": { 13 | "Bekusc\\Validation\\": "src/" 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # Laravel Auto-validation 2 | This package will allow you to remove all manual validations from your controllers. 3 | 4 | ## Installation 5 | Simply go to your project directory where the `composer.json` file is located and type in your terminal: 6 | 7 | ```sh 8 | composer require bekusc/laravel-auto-validation 9 | ``` 10 | 11 | Add the service provider to your `providers` array in `config/app.php`: 12 | 13 | ```php 14 | 'providers' => [ 15 | // ... 16 | Bekusc\Validation\AutoValidationProvider::class, 17 | ], 18 | ``` 19 | 20 | Add the trait to your base controller `App\Http\Controllers\Controller`: 21 | 22 | ```php 23 | use Bekusc\Validation\Traits\AutoValidation; 24 | 25 | class Controller extends BaseController 26 | { 27 | use AutoValidation; 28 | } 29 | ``` 30 | 31 | Publish config: 32 | 33 | ``` 34 | php artisan vendor:publish --provider="Bekusc\Validation\AutoValidationProvider" 35 | ``` 36 | 37 | Update config file with your validation rules in: 38 | 39 | ``` 40 | config/validation.php 41 | ``` 42 | 43 | ## Example 44 | 45 | `config/validation.php` file: 46 | 47 | ```php 48 | use Illuminate\Validation\Rule; 49 | 50 | $rules = [ 51 | 'UserController' => [ 52 | 'register' => [ 53 | 'name' => 'required|max:255', 54 | 'email' => ['required', 'email', 'max:255', Rule::unique('users')->where('status', 1)], 55 | 'password' => 'required|min:6|confirmed', 56 | 'gender' => 'required|in:male,female', 57 | 'birthday' => 'required|date_format:Y-n-j', 58 | ], 59 | 'update' => function ($request) { 60 | return [ 61 | 'name' => 'required|max:255', 62 | 'email' => 'required|email|max:255|unique:users,email,'.$request->user()->id, 63 | 'gender' => 'required|in:male,female', 64 | 'birthday' => 'required|date_format:Y-n-j', 65 | ]; 66 | }, 67 | ], 68 | ]; 69 | 70 | return ['rules' => $rules]; 71 | ``` 72 | 73 | `UserController.php` file: 74 | 75 | ```php 76 | class UserController extends Controller 77 | { 78 | public function register(Request $request) 79 | { 80 | // The incoming request is valid... 81 | User::create($request->all()); 82 | } 83 | 84 | public function update(Request $request) 85 | { 86 | // The incoming request is valid... 87 | $request->user()->update($request->all()); 88 | } 89 | } 90 | ``` 91 | 92 | ## Note 93 | If validation fails, a redirect response will be generated to send the user back to their previous location. The errors will also be flashed to the session so they are available for display. If the request was an AJAX request, a HTTP response with a 422 status code will be returned to the user including a JSON representation of the validation errors. 94 | -------------------------------------------------------------------------------- /src/AutoValidationProvider.php: -------------------------------------------------------------------------------- 1 | publishes([ 17 | __DIR__.'/config/validation.php' => config_path('validation.php'), 18 | ]); 19 | } 20 | 21 | /** 22 | * Register the service provider. 23 | * 24 | * @return void 25 | */ 26 | public function register() 27 | { 28 | // 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/Traits/AutoValidation.php: -------------------------------------------------------------------------------- 1 | validateRequest(get_class($this), $method); 20 | 21 | return $this->$method(...array_values($parameters)); 22 | } 23 | 24 | /** 25 | * Validate the request with specified rules in validation config. 26 | * 27 | * @param string $class 28 | * @param string $method 29 | * @return void 30 | */ 31 | protected function validateRequest(string $class, string $method) 32 | { 33 | $rules = $this->getValidationRules($class, $method); 34 | 35 | if ($rules) { 36 | $request = request(); 37 | 38 | if ($rules instanceof Closure) { 39 | $rules = $rules($request); 40 | } 41 | 42 | $this->validate($request, $rules); 43 | } 44 | } 45 | 46 | /** 47 | * Get the rules to be used for request validation. 48 | * 49 | * @param string $class 50 | * @param string $method 51 | * @return array 52 | */ 53 | protected function getValidationRules(string $class, string $method) 54 | { 55 | $namespace = config("validation.namespace"); 56 | 57 | if (is_null($namespace)) { 58 | $namespace = 'App\Http\Controllers'; 59 | } 60 | 61 | $class_name = substr($class, strlen($namespace) + 1); 62 | 63 | return config("validation.rules.{$class_name}.{$method}"); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/config/validation.php: -------------------------------------------------------------------------------- 1 | [ 8 | 'register' => [ 9 | 'name' => 'required|max:255', 10 | 'email' => ['required', 'email', 'max:255', Rule::unique('users')->where('status', 1)], 11 | 'password' => 'required|min:6|confirmed', 12 | 'gender' => 'required|in:male,female', 13 | 'birthday' => 'required|date_format:Y-n-j', 14 | ], 15 | 'update' => function ($request) { 16 | return [ 17 | 'name' => 'required|max:255', 18 | 'email' => 'required|email|max:255|unique:users,email,'.$request->user()->id, 19 | 'gender' => 'required|in:male,female', 20 | 'birthday' => 'required|date_format:Y-n-j', 21 | ]; 22 | } 23 | ], 24 | 'ResetPasswordController' => [ 25 | 'getResetMethods' => [ 26 | 'keyword' => 'required', 27 | ], 28 | 'sendToken' => [ 29 | 'method' => 'required|in:mail,phone_number', 30 | 'keyword' => 'required', 31 | ], 32 | 'reset' => [ 33 | 'token' => 'required', 34 | 'password' => 'required|min:6|confirmed', 35 | ], 36 | ], 37 | 'Student\LessonsController' => [ 38 | 'create' => [ 39 | 'date' => 'required|date_format:Y-n-j', 40 | 'time' => 'required|date_format:H:i', 41 | 'duration' => 'required', 42 | 'teacher_id' => 'required', 43 | 'language_id' => 'required', 44 | ], 45 | ], 46 | ]; 47 | 48 | return [ 49 | 'rules' => $rules, 50 | 'namespace' => 'App\Http\Controllers', 51 | ]; 52 | --------------------------------------------------------------------------------