prinsfrank/php-validated-properties

使用属性规则在PHP8.1及更高版本中验证属性

v0.0.2 2022-02-14 18:45 UTC

This package is auto-updated.

Last update: 2024-09-11 01:27:44 UTC


README

Banner

PHP Validated Properties

GitHub Build Status Scrutinizer Code Quality Code Coverage PHP Version Support

将规则属性添加到模型属性中,以确保其有效性。

为什么使用这个包?

当验证来自请求、导入或API的外部数据时,常见的PHP包允许您以非结构化的方式验证传入的数据,并返回这些数据。使用此包,您可以直接将验证规则添加到结构化模型中;

#[Url]
protected string $url;

#[Between(1, 100)]
protected int $nrOfItems;

#[Email]
protected string $email;

当一个属性被设置为不符合这些规则的值时,将抛出ValidationException异常。(可以被应用程序具体处理)

设置

要启动,只需运行;

composer require prinsfrank/php-validated-properties

创建验证模型

并扩展PrinsFrank\PhpStrictModels\Model中的基础模型;

<?php

use PrinsFrank\PhpStrictModels\Model;

class ValidatedModel extends Model {

}
如果您的模型已经扩展了另一个基础模型,您也可以使用WithValidatedProperties特质
<?php

use PrinsFrank\PhpStrictModels\WithValidatedProperties;
use Illuminate\Database\Eloquent\Model;

class ValidatedModel extends Model {
    use WithValidatedProperties;
}

添加验证属性

要添加验证规则到属性,将它们作为属性添加到受保护和私有属性中

<?php

use PrinsFrank\PhpStrictModels\Model;
use PrinsFrank\PhpStrictModels\Rule\Between;
use PrinsFrank\PhpStrictModels\Rule\Url;

class ValidatedModel extends Model {
    #[Between(1,5)]
    protected int $nrOfItems;
    
    #[Url]
    protected string $url;
}

由于PHP内部工作方式,无法验证公共属性,因此扩展验证模型或使用WithValidatedProperties特质的模型在包含具有规则属性的公共属性时将抛出异常。

PHPStan支持

为了让PHPStan理解此包,并使其能够通过静态分析防止任何可检测到的错误,提供了一个PHPStan插件,位于prinsfrank/php-validated-properties-phpstan。要将其添加到phpstan.neon,只需运行以下命令;

composer require prinsfrank/php-validated-properties-phpstan --dev

并将以下行添加到您的phpstan.neon文件中的includes部分

includes:
    - vendor/prinsfrank/php-validated-properties/development/PHPStan/extension.neon