secit-pl / validation-bundle
额外的 Symfony 验证器。
Requires
- php: >=8.2.0
- symfony/dependency-injection: ~7.0
- symfony/expression-language: ~7.0
- symfony/framework-bundle: ~7.0
- symfony/http-foundation: ~7.0
- symfony/validator: ~7.0
- voku/anti-xss: ~4.1
Requires (Dev)
- doctrine/orm: ^2.6
- phpunit/phpunit: @stable
Suggests
- sineflow/clamav: Required by ClamAvScanFileValidator
- wesbos/burner-email-providers: Required by BurnerEmailValidator
README
为 Symfony 设置了额外的验证器。
兼容性矩阵
安装
在命令行中运行
$ composer require secit-pl/validation-bundle
验证器
NotBlankIf
此验证器检查值是否不为空,就像标准的 NotBlank Symfony 验证器一样,但也允许使用 Symfony 表达式语言定义 NotBlank 验证应执行的条件。
从 Symfony 6.2 开始,您还可以使用 When 验证器。
https://symfony.ac.cn/blog/new-in-symfony-6-2-conditional-constraints
https://symfony.ac.cn/doc/6.2/reference/constraints/When.html
示例用法
use SecIT\ValidationBundle\Validator\Constraints as SecITAssert; // ... #[SecITAssert\NotBlankIf("this.isSuperUser")] private ?string $email = null; public function isSuperUser(): bool { return true; }
参数
FileExtension
此验证器检查文件是否具有有效的文件扩展名。
从 Symfony 6.2 开始,您还可以在 File 验证器中使用 "extensions" 选项。
https://symfony.ac.cn/blog/new-in-symfony-6-2-improved-file-validator
https://symfony.ac.cn/doc/6.2/reference/constraints/File.html#extensions
示例用法
use SecIT\ValidationBundle\Validator\Constraints as SecITAssert; // ... #[SecITAssert\FileExtension(["jpg", "jpeg", "png"])] private $file;
use SecIT\ValidationBundle\Validator\Constraints as SecITAssert; // ... #[SecITAssert\FileExtension(disallowedExtensions: ["jpg", "jpeg", "png"])] private $file;
参数
注意!强烈建议与原生 Symfony 文件/图片验证器一起使用此验证器。
use SecIT\ValidationBundle\Validator\Constraints as SecITAssert; use Symfony\Component\Validator\Constraints as Assert; // ... #[Assert\Image(maxSize: '2M', mimeTypes: ["image/jpg", "image/jpeg", "image/png"])] #[SecITAssert\FileExtension(validExtensions: ["jpg", "jpeg", "png"])] private $file;
CollectionOfUniqueElements
检查集合是否只包含唯一元素。
参数
use SecIT\ValidationBundle\Validator\Constraints as SecITAssert; // ... #[SecITAssert\CollectionOfUniqueElements()] private $collection;
此验证器还可以用于验证唯一文件上传。
<?php declare(strict_types=1); namespace App\Form; use SecIT\ValidationBundle\Validator\Constraints\CollectionOfUniqueElements; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\CollectionType; use Symfony\Component\Form\Extension\Core\Type\FileType; use Symfony\Component\Form\FormBuilderInterface; class ExampleType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('files', CollectionType::class, [ 'entry_type' => FileType::class, 'allow_add' => true, 'constraints' => [ new CollectionOfUniqueElements(), ], ]); } }
AntiXss
检查文本是否包含使用 voku\anti-xss 库进行的 XSS 攻击。
use SecIT\ValidationBundle\Validator\Constraints as SecITAssert; // ... #[SecITAssert\AntiXss()] private $text;
NaiveNoHtml
执行非常简单的检查以确定文本是否包含 HTML。
use SecIT\ValidationBundle\Validator\Constraints as SecITAssert; // ... #[SecITAssert\NaiveNoHtml()] private $text;
参数
BurnerEmail
检查电子邮件地址是否为一次性电子邮件地址(burner email)。此检查是对 wesbos/burner-email-providers 提供的列表进行的。如果您想使用此验证器,则需要手动安装此包 (composer require wesbos/burner-email-providers
)。
use SecIT\ValidationBundle\Validator\Constraints as SecITAssert; // ... #[SecITAssert\BurnerEmail()] private $email;
ClamAvScanFile
使用 ClamAV 扫描文件以检测感染。检查是通过 sineflow/clamav 包进行的。如果您想使用此验证器,则需要手动安装和配置此包。
您可以在以下位置找到测试文件 https://github.com/fire1ce/eicar-standard-antivirus-test-files/tree/master。
如果将 PrivateTmp 设置为 true,则验证器将无法正常工作,因为 PHP 中的临时文件路径将与实际系统临时文件路径不同,因此 clamscan 将找不到要扫描的文件!
use SecIT\ValidationBundle\Validator\Constraints as SecITAssert; // ... #[SecITAssert\ClamAvScanFile()] private \Symfony\Component\HttpFoundation\File\File $file;
想支持此包吗?
请考虑在我们的 random code generator 服务 codito.io 上使用。
在 codito.io 上,您可以免费生成多达 250,000 个格式任意的代码。您可以使用生成的代码用于诸如促销代码(例如,可以打印在包装内部)、序列号、一次性或多次使用的密码、彩票券、折扣代码、优惠券、随机字符串等目的 - 更多用例请参阅我们的 示例。如果 250,000 个代码不够用,您可以使用我们的 商业代码生成服务。