您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
7-3 gii工具之模型生成器代码实现
发布时间:2023-05-13 19:04:15编辑:雪饮阅读()
-
前言:
本次所用test表建表sql参考如:
/*
Navicat Premium Data Transfer
Source Server : localhost
Source Server Type : MySQL
Source Server Version : 50529
Source Host : localhost:3306
Source Schema : wpcourse
Target Server Type : MySQL
Target Server Version : 50529
File Encoding : 65001
Date: 13/05/2023 19:02:15
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for test
-- ----------------------------
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` char(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '标题',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Fixed;
SET FOREIGN_KEY_CHECKS = 1;
通过gii模型生成器生成的模型其实我们可以看看已经生成的,模型,则我们也就可以参考着自己手动实现写一个大概符合其规范的模型。
tableName
public static function tableName()
{
return 'test';
}
这是模型里面算是比较核心的,就是静态方法tableName中返回该模型对应的数据表名称。
rules
模型中的rules一般是判断数据入库前的验证规则,我感觉这里一般也是从数据表里面相关字段配置读取来实现的。
public function rules() { return [ /*这里required的验证是我手写的,不晓得如果直接在数据表中怎样配置才能自动生成,说不定老师的那个也是自己写的 * */ [['title'],'required'], /* * 这里我数据库中title字段类型为char, * 应该是字符类型,这里自动就配备为string, * 然后我的数据库中char的长度设置为50,所以这里应该也是类似参考max为50 * */ [['title'], 'string', 'max' => 50] ]; }required验证该字段必须有值
如:
$test=new Test(); $test->save(); print_r($test->getErrors());这样就会输出如:
Array ( [title] => Array ( [0] => Title cannot be blank. ) )
因为title字段根本没有赋值
string验证该值必须是字符串
如:
$test=new Test(); $test->title=1; $test->save(); print_r($test->getErrors());这样虽然title有值了,但是值的类型不是字符串,会报错如:
Array ( [title] => Array ( [0] => Title must be a string. ) )
max验证该值最大长度。这个暂时就先不举例了。
attributeLabels
attributeLabels主要是我认为应该是从数据库字段配置对应如key为字段名,val为字段注释,类似这样的键值对,我甚至以为会自动从数据的表设计上面读取。实际上好像不是这样(并没有读取字段注释内容为val,可能我用的姿势不对?)。
但另外一个作用就是用字段所在key对应的val做为该字段在rules中配置的rule中出现错误时候在getErrors返回某个字段错误时候,会以这里val字段注释做为提示中为了提示那个字段的错误,上面那个验证title必须为string时候的attributeLabels中的配置如:
public function attributeLabels() { return [ 'id' => 'ID', 'title' => 'Title', ]; }那么上面的提示也看到了是
Array ( [title] => Array ( [0] => Title must be a string. ) )
那么比如修改为
public function attributeLabels() { return [ 'id' => 'ID', 'title' => '这是一个标题', ]; }然后再次抛出错误时则如:
Array ( [title] => Array ( [0] => 这是一个标题 must be a string. ) )
最后:
只有符合了rules规则后数据才能成功插入到数据库表中。
关键字词:模型,gii,生成器