# model 模型
## 命名
## 验证规则
按照约定的顺序进行字段验证,并且需要继承父级。
1. 过滤空格
2. 必须的字段
3. 字段声明(int)
4. 字段声明(string)
5. 个性化验证
6. 唯一验证
>[info] 顺序必须保持与数据库字段一致。
>[info] 除了最后两种验证,其它验证第一个参数必须使用数组。
>[info] 必须的字段只需保证最少字段即可,更多的请写在表单模型中。
>[info] `filter`验证需要注意,将会自动将没有值的字段变为空字符串`''`。
>[info] 字段声明必要时请声明最小值,如:`int`类型。
>[info] 错误信息使用`{attribute}`代替,并在句末加上句号。
~~~
/**
* 验证规则
*/
public function rules()
{
$rules = parent::rules();
$new = [
[['username', 'mobile'], 'filter', 'filter' => 'trim'],
[['dealer_id', 'username'], 'required'],
[['dealer_id', 'address_id', 'sex', 'birthday', 'oauth_source', 'last_at', 'status', 'created_at', 'updated_at'], 'integer', 'min' => 0],
[['username'], 'string', 'min' => 5, 'max' => 16],
[['auth_key'], 'string', 'max' => 32],
[['password_hash', 'password_reset_token'], 'string', 'max' => 255],
[['email', 'real_name'], 'string', 'max' => 64],
[['mobile', 'last_ip'], 'string', 'max' => 16],
[['avatar', 'oauth_openid'], 'string', 'max' => 128],
['username', 'match', 'pattern' => '/^[(\x{4E00}-\x{9FA5})a-zA-Z]+[(\x{4E00}-\x{9FA5})a-zA-Z_\d]*$/u', 'message' => '{attribute}由字母、汉字、数字、下划线组成,且不能以数字和下划线开头。'],
['email', 'email'],
['mobile', 'match', 'pattern' => '/^(((13[0-9]{1})|(14[0-9]{1})|(17[0]{1})|(15[0-3]{1})|(15[5-9]{1})|(18[0-9]{1}))+\d{8})$/', 'message' => '请输入有效的{attribute}。'],
['username', 'unique', 'targetClass' => Member::className(), 'message' => '此{attribute}已被使用。'],
['email', 'unique', 'targetClass' => Member::className(), 'message' => '此{attribute}已被使用。'],
['mobile', 'unique', 'targetClass' => Member::className(), 'message' => '此{attribute}已被使用。'],
];
// 合并数组
return ArrayHelper::merge($rules, $new);
}
~~~
## 自定义方法
### 优先前缀
优先写出常用前缀的方法便于快速开发,具体为`get`、`set`、`del`。
>[info] `get`表示获取数据,常用的有`getInfo`、`getList`。
>[info] `set`表示更新或添加数据,常用的有`setInfo`、`setList`。
>[info] `del`表示删除数据,常用的有`delInfo`、`delList`。
~~~
public static function getInfo($id){ ... }
public static function getList($goodsId){ ... }
public static function setInfo(array $data){}
...
~~~