vitallyspirin/simplephpactiverecord

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

1.0.1 2016-08-17 20:39 UTC

This package is not auto-updated.

Last update: 2024-09-14 20:20:08 UTC


README

PHP ActiveRecord (phpactiverecord.org) 扩展,包括自动生成的验证器。

安装

composer require vitalyspirin/simplephpactiverecord

快速开始

class T1 extends \vitalyspirin\simplephpactiverecord\SimpleActiveRecord
{
    public static $validates_presence_of = [];
    public static $validates_size_of = [];
    public static $validates_numericality_of = [];
    public static $validates_uniqueness_of = [];
    public static $validates_inclusion_of = [];
    public static $validates_format_of = [];
}

不需要硬编码验证器,因为它们将由类构造函数根据表结构自动添加。然而,当前版本中,基于外键的关系将不会添加。

静态属性(验证器)必须添加到每个扩展 SimpleActiveRecord 类的子模型中,因为在 PHP 中无法动态创建静态属性。

此类实例的创建方式如下

$t1 = new T1();

如果表结构发生变化,验证器将自动调整。

示例

假设我们有以下 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
);

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

class Person extends \vitalyspirin\simplephpactiverecord\SimpleActiveRecord
{
    static $table_name = 'person';
    
    public static $validates_presence_of = [];
    public static $validates_size_of = [];
    public static $validates_numericality_of = [];
    public static $validates_uniqueness_of = [];
    public static $validates_inclusion_of = [];
    public static $validates_format_of = [];
}

$person = new Person();

echo "validates_presence_of:";
var_dump($person::$validates_presence_of);

echo "validates_size_of:";
var_dump($person::$validates_size_of);

echo "validates_numericality_of:";
var_dump($person::$validates_numericality_of);

echo "validates_inclusion_of:";
var_dump($person::$validates_inclusion_of);

我们将得到以下输出

validates_presence_of:array(2) {
  [0] =>
  array(1) {
    [0] =>
    string(16) "person_firstname"
  }
  [1] =>
  array(1) {
    [0] =>
    string(15) "person_lastname"
  }
}
validates_size_of:array(2) {
  [0] =>
  array(2) {
    [0] =>
    string(16) "person_firstname"
    'maximum' =>
    int(35)
  }
  [1] =>
  array(2) {
    [0] =>
    string(15) "person_lastname"
    'maximum' =>
    int(35)
  }
}
validates_numericality_of:array(1) {
  [0] =>
  array(3) {
    [0] =>
    string(13) "person_salary"
    'greater_than_or_equal_to' =>
    int(0)
    'allow_null' =>
    bool(true)
  }
}
validates_inclusion_of:array(1) {
  [0] =>
  array(3) {
    [0] =>
    string(13) "person_gender"
    'in' =>
    array(2) {
      [0] =>
      string(4) "male"
      [1] =>
      string(6) "female"
    }
    'allow_null' =>
    bool(true)
  }
}

你还可以在 SimpleActiveRecordTest.php 中查看简单的示例测试。