目标

熟悉gii的使用。
使用gii生成一套管理界面,并添加两列数据。
下一篇再介绍GridView和搜索表单

gii工具

我们尝试使用gii生成代码。
安装好yii之后,在浏览器访问/gii就可以打开代码生成工具gii了。

如果你打不开/gii页面,那么查看\frontend\config\main-local.php中下面的代码是不是被注释了,如果没有这段代码,就添加上。

$config['bootstrap'][] = 'gii';
$config['modules']['gii'] = [
    'class' => 'yii\gii\Module',
];

微信截图_20170704153631.png

创建测试表

在数据库执行下面的sql语句,另外当然要在你yii设置的数据库执行。

CREATE TABLE `student` (
  `stuid` int(11) NOT NULL COMMENT '学号',
  `name` varchar(255) NOT NULL COMMENT '姓名',
  `sex` enum('0','1') NOT NULL DEFAULT '0' COMMENT '性别',
  `age` int(3) NOT NULL DEFAULT '0' COMMENT '状态',
  `chinese` int(3) NOT NULL DEFAULT '0' COMMENT '语文',
  `math` int(3) NOT NULL DEFAULT '0' COMMENT '数学',
  `english` int(3) NOT NULL DEFAULT '0' COMMENT '外语',
  `other` text COMMENT '备注',
  PRIMARY KEY (`stuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `student` VALUES ('1', '张韭菜', '0', '15', '80', '60', '100', null);
INSERT INTO `student` VALUES ('2', '李蒜苗', '0', '18', '60', '60', '70', '2333');
INSERT INTO `student` VALUES ('3', '王紫菜', '1', '16', '70', '60', '60', '4555');
INSERT INTO `student` VALUES ('4', '孙悟空', '1', '17', '99', '70', '80', null);
INSERT INTO `student` VALUES ('5', '赵铁柱', '0', '25', '78', '78', '78', '666666');

创建model

进入/gii/model,按照下面填写。

微信截图_20170704155412.png

点击Preview之后,点击Generate确认生成,在不修改模板的情况下,我们得到下面两个文件。
\frontend\models\Student.php

<?php

namespace frontend\models;

use Yii;

/**
 * This is the model class for table "student".
 *
 * @property integer $stuid
 * @property string $sex
 * @property integer $age
 * @property integer $chinese
 * @property integer $math
 * @property integer $english
 * @property string $other
 */
class Student extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'student';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['stuid'], 'required'],
            [['stuid', 'age', 'chinese', 'math', 'english'], 'integer'],
            [['sex', 'other'], 'string'],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'stuid' => '学号',
            'sex' => '性别',
            'age' => '状态',
            'chinese' => '语文',
            'math' => '数学',
            'english' => '外语',
            'other' => '备注',
        ];
    }

    /**
     * @inheritdoc
     * @return StudentQuery the active query used by this AR class.
     */
    public static function find()
    {
        return new StudentQuery(get_called_class());
    }
}

\frontend\models\StudentQuery.php

<?php

namespace frontend\models;

/**
 * This is the ActiveQuery class for [[Student]].
 *
 * @see Student
 */
class StudentQuery extends \yii\db\ActiveQuery
{
    /*public function active()
    {
        return $this->andWhere('[[status]]=1');
    }*/

    /**
     * @inheritdoc
     * @return Student[]|array
     */
    public function all($db = null)
    {
        return parent::all($db);
    }

    /**
     * @inheritdoc
     * @return Student|array|null
     */
    public function one($db = null)
    {
        return parent::one($db);
    }
}

生成CRUD

进入/gii/crud,按照下面填写。
微信截图_20170712161111.png

点击Preview之后,直接点击Generate确认生成。

如果显示有两个文件要被diff,那就选中这两个文件,如果你先用了controller生成工具,就会有两个文件已经创建。

页面展示

如果你配置了rbac,按照路由、权限、分配、菜单的顺序添加权限和菜单,添加完成打开页面你大概能看到下面的页面。
如果你没有配置权限管理,就直接打开页面就可以了。
如果你看到的是404,可能命名空间写的不对,如果看到的是没有权限那说明你没有添加路由或者权限或者没有分配权限到你的账号。

打开/student/index

微信截图_20170712161712.png

添加其他需求

添加数据列

那现在我们想要添加两列时间,应该要怎么做。
执行下面的sql添加两列时间,一列存储入学时间,使用时间戳。一列存储出生日期,使用datetime。

ALTER TABLE student ADD in_time INT DEFAULT NULL COMMENT '入学时间' AFTER english;
ALTER TABLE student ADD born_time DATETIME DEFAULT NULL COMMENT '出生日期' AFTER in_time;
UPDATE student SET in_time=1500260259;
UPDATE student SET born_time='2017-07-17 12:05:21';

添加了两列数据之后,去修改表格展示GridView
打开\frontend\views\student\index.php修改GridView中的配置数组,添加将刚才的列名添加进去。

数学和英语两列本来是注释掉的,这里我把注释删掉了
[
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],
            'stuid',
            'name',
            'sex',
            'age',
            'chinese',
            'math',
            'english',
            'in_time',
            'born_time',
            // 'other:ntext',
        ['class' => 'yii\grid\ActionColumn'],
    ],
]

从下图可以看到添加了两列数据,但是标题都是根据列名生成的,入学时间的时间戳不是时间格式。

微信截图_20170717110554.png

打开\frontend\models\Student.php找到attributeLabels()函数,添加两行。

public function attributeLabels()
{
    return [
        'stuid' => '学号',
        'name' => '姓名',
        'sex' => '性别',
        'age' => '状态',
        'chinese' => '语文',
        'math' => '数学',
        'english' => '外语',
        'in_time' => '入学日期',
        'born_time' => '出生日期',
        'other' => '备注',
    ];
}

刷新浏览器页面,看到title已经按照我们新添加的规则修改了。

微信截图_20170717122054.png


下一篇会详细介绍GridView和搜索表单的创建。

最后修改:2021 年 01 月 12 日
如果觉得我的文章对你有用,请随意赞赏