gordensong / laravel-validator
laravel, validator, rules
v0.1.7
2022-05-27 09:04 UTC
Requires
- php: ^7.2.5|^8.0
- ext-json: *
- doctrine/dbal: ^2.9
- illuminate/console: 5.6.*|^6.0|^7.0|^8.0
- illuminate/database: 5.6.*|^6.0|^7.0|^8.0
- illuminate/filesystem: 5.6.*|^6.0|^7.0|^8.0
- illuminate/support: 5.6.*|^6.0|^7.0|^8.0
Requires (Dev)
- fzaninotto/faker: ^1.9
- orchestra/testbench: ^5.5
- phpunit/phpunit: ^8.4
This package is not auto-updated.
Last update: 2024-09-27 20:52:02 UTC
README
https://gitee.com/gordensong/laravel-validator.git
用法展示
routes/web.php
Route::post('/user/name-register')
->uses([UserController::class, 'nameRegister'])
->name('user.name-register');
Route::post('/user/add-addresses')
->uses([UserController::class, 'addAddresses'])
->name('user.add-addresses');
UserController.php
<?php
namespace App\Http\Controllers;
use App\Validators\Mysql\UsersAddressValidator;
use App\Validators\Mysql\UsersValidator;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function nameRegister(Request $request, UsersValidator $validator): JsonResponse
{
$validated = $validator->scene('name-register')->validate($request->all());
return response()->json($validated);
}
public function addAddresses(Request $request, UsersAddressValidator $addressesValidator)
{
$validated = $addressesValidator
->only('province', 'city', 'district')
->prefix('addresses.*')
->validate($request->all());
return response()->json($validated);
}
}
UserControllerTest.php
<?php
namespace Tests\App\Http\Controllers;
use Tests\TestCase;
class UserControllerTest extends TestCase
{
public function test_nameRegister($route = 'user.name-register')
{
$data = [
'name' => 'jack',
'password' => '123456',
'password_confirmation' => '123456',
];
$this->postJson(route($route), $data)
->assertOk()
->assertJson([
'name' => 'jack',
'password' => '123456',
]);
}
public function test_addAddresses($route = 'user.add-addresses')
{
$data = [
'addresses' => [
['province' => 'PA1', 'city' => 'CA1', 'district' => 'DA1'],
['province' => 'PA2', 'city' => 'CA2', 'district' => 'DA2'],
],
];
$this->postJson(route($route), $data)
->assertOk()
->assertJson($data);
}
}
command
php artisan validator:make {table*} {--connection=mysql}
# output:
#validator exists : /app/Validators/Mysql/UsersValidator.php
#validator trait created: /app/Validators/Mysql/UsersValidator.php
#...
目录结构
/app
- /Validators
- /Mysql
- /DatabaseRules // 存放表规则
- UsersValidatorTrait.php // users 表
- UsersAddressValidatorTrait.php
- ...
- UsersValidator.php // users 表的自定义规则
- UsersAddressValidator.php
- ...
- /DatabaseRules // 存放表规则
- /Mysql
Demo
UsersValidator.php
只生成一次。
<?php
namespace App\Validators\Mysql;
class UsersValidator extends \GordenSong\Laravel\Support\Validator
{
use \App\Validators\Mysql\DatabaseRules\UsersValidatorTrait;
public function customizeRules(): array
{
return [
'id' => ['required'],
'name' => ['required', 'min:3', 'max:50'], // 'min:3', 'max:50' 为自定义规则,
'password' => ['required'],
'created_at' => [],
'updated_at' => [],
];
}
public function excludeRules(): array
{
return [
'created_at', // 排除验证的字段
'updated_at',
];
}
protected $messages = [
];
protected $attributes = [
// 'id' => '',
// 'name' => '',
// 'password' => '',
// 'created_at' => '',
// 'updated_at' => '',
];
protected $scenes = [
'name-register' => ['name', 'password' => 'confirmed'],
];
}
UsersValidatorTrait.php
自动生成,每次生成时自动覆盖旧文件。
<?php
namespace App\Validators\Mysql\DatabaseRules;
trait UsersValidatorTrait
{
public function tableRules(): array
{
return [
'id' => [
'integer',
'min:0',
],
'name' => [
'string',
'max:255',
],
'email' => [
'string',
'max:255',
],
'email_verified_at' => [
'date',
],
'password' => [
'string',
'max:255',
],
'remember_token' => [
'string',
'max:100',
],
'created_at' => [
'date',
],
'updated_at' => [
'date',
],
];
}
}