keniley/symfony-request-validation

v0.1.0 2019-06-25 22:32 UTC

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
}