vitalyspirin/yii2-simpleactiverecord

此包的最新版本(1.0.7)没有可用的许可证信息。

Yii2 ActiveRecord 的扩展,增加了自动生成的验证器

安装: 965

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 0

开放问题: 0

语言:HTML

类型:yii2-extension

1.0.7 2018-09-12 18:58 UTC

This package is not auto-updated.

Last update: 2024-09-13 22:38:33 UTC


README

Yii 2 ActiveRecord 的扩展,包含自动生成的验证器。

快速开始

要安装它,您可以下载 zip 文件或使用 composer

composer require vitalyspirin/yii2-simpleactiverecord

在代码中使用它

use vitalyspirin\yii2\simpleactiverecord\SimpleActiveRecord;


class T1 extends SimpleActiveRecord
{
    
}

无需覆盖 rules() 函数来指定验证器。验证器将由类构造函数根据表模式自动添加。然而,在当前版本中,基于外键的关系将不会添加。

创建此类实例有两种方式。SimpleActiveRecord 构造函数接受一个布尔参数:$maximumValidation。如果为 'false',则仅添加由 Gii 生成的验证器。在上面的示例中,它看起来像这样

$t1 = new T1(false);

如果传递 'true'(这是默认值),则将添加最大验证功能。它包括整数范围、枚举范围、时间模式等。当然,您可以查看这些验证器

$t1 = new T1();
var_dump($t1->rules());

如果表模式更改,验证器将自动调整。

示例

假设我们有以下 SQL 模式

CREATE TABLE person
(
  person_id         INT PRIMARY KEY AUTO_INCREMENT,
  person_firstname  VARCHAR(35) NOT NULL,
  person_lastname   VARCHAR(35) NOT NULL,
  person_gender     ENUM('male', 'female'),
  person_dob        DATE NULL,
  person_salary     DECIMAL UNSIGNED
);

然后,如果我们运行以下代码

use vitalyspirin\yii2\simpleactiverecord\SimpleActiveRecord;


class Person extends SimpleActiveRecord
{
    // totally empty class
}

$person = new Person(false  /*Gii style validation only*/ );
var_dump($person->rules());

我们将得到以下输出

array (size=5)
  0 => 
    array (size=2)
      0 => 
        array (size=2)
          0 => string 'person_firstname' (length=16)
          1 => string 'person_lastname' (length=15)
      1 => string 'required' (length=8)
  1 => 
    array (size=2)
      0 => 
        array (size=1)
          0 => string 'person_salary' (length=13)
      1 => string 'number' (length=6)
  2 => 
    array (size=2)
      0 => 
        array (size=1)
          0 => string 'person_dob' (length=10)
      1 => string 'safe' (length=4)
  3 => 
    array (size=3)
      0 => 
        array (size=2)
          0 => string 'person_firstname' (length=16)
          1 => string 'person_lastname' (length=15)
      1 => string 'string' (length=6)
      'max' => int 35
  4 => 
    array (size=2)
      0 => 
        array (size=1)
          0 => string 'person_gender' (length=13)
      1 => string 'string' (length=6)

上述验证器与 Yii 的 Gii 模块生成的验证器相同。如果没有提供 false 参数调用类构造函数,还可以生成额外的验证器

$person = new Person();
var_dump($person->rules());

在这种情况下,输出将如下(注意 'person_gender'、'person_dob' 和 'person_salary' 字段)

array (size=5)
  0 => 
    array (size=2)
      0 => 
        array (size=2)
          0 => string 'person_firstname' (length=16)
          1 => string 'person_lastname' (length=15)
      1 => string 'required' (length=8)
  1 => 
    array (size=3)
      0 => 
        array (size=1)
          0 => string 'person_gender' (length=13)
      1 => string 'in' (length=2)
      'range' => 
        array (size=2)
          0 => string 'male' (length=4)
          1 => string 'female' (length=6)
  2 => 
    array (size=5)
      0 => 
        array (size=1)
          0 => string 'person_dob' (length=10)
      1 => string 'date' (length=4)
      'format' => string 'yyyy-MM-dd' (length=10)
      'min' => string '1000-01-01' (length=10)
      'max' => string '9999-12-31' (length=10)
  3 => 
    array (size=3)
      0 => 
        array (size=1)
          0 => string 'person_salary' (length=13)
      1 => string 'number' (length=6)
      'min' => int 0
  4 => 
    array (size=3)
      0 => 
        array (size=2)
          0 => string 'person_firstname' (length=16)
          1 => string 'person_lastname' (length=15)
      1 => string 'string' (length=6)
      'max' => int 35

您也可以向构造函数传递属性

$person = new Person(['person_firstname' => 'John', 'person_lastname' => 'Smith']);
echo $person->person_firstname;

在上面的示例中,默认选择最大验证。您可以显式指定验证级别(以下示例中的 Gii 风格验证)

$person = new Person(false, ['person_firstname' => 'John', 'person_lastname' => 'Smith']);
echo $person->person_firstname;

其他特性

此 Active Record 扩展还具有 getEnumValues() 函数,用于显示表列的枚举值。以下代码

$person = new Person();
var_dump($person->getEnumValues());

将返回

array (size=1)
  'person_gender' => 
    array (size=2)
      0 => string 'male' (length=4)
      1 => string 'female' (length=6)

您还可以在 SimpleActiveRecordTest.php 中查看测试,以获取简单示例。