keniley / symfony-request-validation
v0.1.0
2019-06-25 22:32 UTC
Requires
- php: ^7.0
- symfony/http-foundation: ^3.0|^4.0
- symfony/http-kernel: ^3.0|^4.0
- symfony/property-access: ^3.0|^4.0
- symfony/validator: ^3.0|^4.0
This package is auto-updated.
Last update: 2024-09-26 09:45:32 UTC
README
此包扩展了标准的 symfony 请求类,增加了几个功能,尤其是在请求中直接进行验证。
安装
使用 composer 安装此包
$ composer require keniley/symfony-request-validation
添加到服务
#config/services.yaml services: Keniley\RequestValidation\Request: arguments: ['@Symfony\Component\HttpFoundation\RequestStack']
基本使用
修改控制器请求类
namespace App\Controller; use Keniley\RequestValidation\Request; class SomeController extends Controller { public function someMethod(Request $request) { // code } }
新方法
从请求中获取所有输入数据。
从查询、请求、文件和 JSON 主体中获取数据。
public function someMethod(Request $request) { $data = $request->all(); // output array }
获取包含提供的键及其值的输入数据子集。
如果键不存在,则返回 null 作为值。
public function someMethod(Request $request) { $data = $request->only(['param1', 'param2']); // output array // or $data = $request->only('param1', 'param2'); // output array }
获取除指定数组项之外的所有输入。
public function someMethod(Request $request) { $data = $request->except(['param1', 'param2']); // output array // or $data = $request->except('param1', 'param2'); // output array }
确定请求是否包含指定的输入项键。
如果您输入多个键,则它们必须包含所有这些键。
public function someMethod(Request $request) { $has = $request->has(['param1', 'param2']); // output bool // or $has = $request->has('param1', 'param2'); // output bool }
确定当前请求是否请求返回 JSON。
通过请求中的 Accept 标头进行确定
public function someMethod(Request $request) { $json = $request->wantsJson(); // output bool }
确定请求是否正在发送 JSON。
通过请求中的 Content-Type 标头进行确定
public function someMethod(Request $request) { $json = $request->isJson(); // output bool }
原始请求
当然,您还有原始请求的所有标准和功能。
public function someMethod(Request $request) { $contentType = $request->getContentType(); }
控制器中的验证
您必须首先创建一组验证规则,然后调用 validate() 方法
namespace App\Controller; use Keniley\RequestValidation\Request; use Symfony\Component\Validator\Constraints as Assert; class SomeController extends Controller { public function someMethod(Request $request) { $rules = new Assert\Collection([ 'param1' => new Assert\NotBlank(), ]); if(! $request->validate($assert)->isValid()) { $errors = $request->errors(); // output array } $data = $request->all(); // some logic } }
独立类中的验证
您可以创建一个新的类,该类继承自 Keniley\RequestValidation\Request
创建新的请求类
namespace App\Request; use Keniley\RequestValidation\Request; use Symfony\Component\Validator\Constraints as Assert; class UserUpdateRequest extends Request { public function rules(): Assert\Collection { $rules = new Assert\Collection([ 'param1' => new Assert\NotBlank(), ]); return $rules; } }
在控制器中使用
namespace App\Controller; use App\Request\UserUpdateRequest; class SomeController extends Controller { public function someMethod(UserUpdateRequest $request) { if(! $request->isValid()) { $errors = $request->errors(); // output array } $data = $request->all(); // some logic } }
用于验证的有用方法
确定请求是否有效
public function someMethod(Request $request) { $valid = $request->isValid(); // output bool }
从验证器获取验证错误
public function someMethod(Request $request) { $errors = $request->errors(); // output array }