Skip to content

Commit

Permalink
feature: LaravelValidator support file
Browse files Browse the repository at this point in the history
  • Loading branch information
krissss committed Sep 18, 2022
1 parent 5b1e388 commit b543c09
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 21 deletions.
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
},
"require": {
"php": ">=7.4",
"ext-json": "*"
"ext-json": "*",
"webman-tech/polyfill": "^1.0"
},
"require-dev": {
"workerman/webman-framework": "^1.3",
Expand Down
2 changes: 1 addition & 1 deletion src/Controller/AmisSourceController.php
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ public function store(Request $request): Response
if (!$this->authCreate()) {
throw new ActionDisableException();
}
$this->repository()->create($request->post());
$this->repository()->create(array_replace_recursive($request->post(), $request->file()));
return amis_response(['result' => 'ok']);
}

Expand Down
29 changes: 29 additions & 0 deletions src/Repository/AbsRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,35 @@ protected function visibleAttributes(string $scene): array
return [];
}

/**
* @inheritDoc
*/
public function create(array $data): void
{
$data = $this->validate($data, static::SCENE_CREATE);
$this->doCreate($data);
}

/**
* @param array $data
*/
abstract protected function doCreate(array $data): void;

/**
* @inheritDoc
*/
public function update(array $data, $id): void
{
$data = $this->validate($data, static::SCENE_UPDATE);
$this->doUpdate($data, $id);
}

/**
* @param array $data
* @param $id
*/
abstract protected function doUpdate(array $data, $id): void;

/**
* 验证字段
* @return array 验证过后的字段
Expand Down
19 changes: 0 additions & 19 deletions src/Repository/EloquentRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -224,15 +224,6 @@ protected function solveDetailResult(EloquentModel $query): array
/**
* @inheritDoc
*/
public function create(array $data): void
{
$data = $this->validate($data, static::SCENE_CREATE);
$this->doCreate($data);
}

/**
* @param array $data
*/
protected function doCreate(array $data): void
{
$model = $this->model();
Expand All @@ -245,16 +236,6 @@ protected function doCreate(array $data): void
/**
* @inheritDoc
*/
public function update(array $data, $id): void
{
$data = $this->validate($data, static::SCENE_UPDATE);
$this->doUpdate($data, $id);
}

/**
* @param array $data
* @param $id
*/
protected function doUpdate(array $data, $id): void
{
$model = $this->query()->findOrFail($id);
Expand Down
9 changes: 9 additions & 0 deletions src/Validator/LaravelValidator.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
namespace WebmanTech\AmisAdmin\Validator;

use Illuminate\Contracts\Validation\Factory;
use Webman\Http\UploadFile;
use WebmanTech\AmisAdmin\Exceptions\ValidationException;
use WebmanTech\Polyfill\LaravelUploadedFile;

class LaravelValidator implements ValidatorInterface
{
Expand All @@ -19,6 +21,13 @@ public function __construct(Factory $validator)
*/
public function validate(array $data, array $rules, array $messages = [], array $customAttributes = []): array
{
foreach ($data as &$value) {
if ($value instanceof UploadFile) {
$value = LaravelUploadedFile::wrapper($value);
}
}
unset($value);

$validator = $this->factory->make($data, $rules, $messages, $customAttributes);
if ($validator->fails()) {
$errors = array_map(fn($messages) => $messages[0], $validator->errors()->toArray());
Expand Down

0 comments on commit b543c09

Please sign in to comment.