首页 > 编程 > PHP > 正文

YII Framework框架使用YIIC快速创建YII应用之migrate用

2020-03-22 20:02:12
字体:
来源:转载
供稿:网友
PHP YII Framework框架使用YIIC快速创建YII应用之migrate用法实例详解
本文实例讲述了YII Framework框架使用YIIC快速创建YII应用之migrate用法。分享给大家供大家参考,具体如下:yii migrate查看帮助/www/yii_dev/yii/framework# php yiic migrate helpError: Unknown action: helpUSAGE yiic migrate [action] [parameter]DESCRIPTION This command provides support for database migrations. The optional 'action' parameter specifies which specific migration task to perform. It can take these html' target='_blank'>values: up, down, to, create, history, new, mark. If the 'action' parameter is not given, it defaults to 'up'. Each action takes different parameters. Their usage can be found in the following examples.EXAMPLES* yiic migrateApplies ALL new migrations. This is equivalent to 'yiic migrate to'.* yiic migrate create create_user_tableCreates a new migration named 'create_user_table'.* yiic migrate up 3Applies the next 3 new migrations.* yiic migrate downReverts the last applied migration.* yiic migrate down 3Reverts the last 3 applied migrations.* yiic migrate to 101129_185401Migrates up or down to version 101129_185401.* yiic migrate mark 101129_185401Modifies the migration history up or down to version 101129_185401.No actual migration will be performed.* yiic migrate historyShows all previously applied migration information.* yiic migrate history 10Shows the last 10 applied migrations.* yiic migrate newShows all new migrations.* yiic migrate new 10Shows the next 10 migrations that have not been applied.在我们开发程序的过程中,数据库的结构也是不断调整的。我们的开发中要保证代码和数据库库的同步。因为我们的应用离不开数据库。例如: 在开发过程中,我们经常需要增加一个新的表,或者我们后期投入运营的产品,可能需要为某一列添加索引。我们必须保持数据结构和代码的一致性。如果代码和数据库不同步,可能整个系统将无法正常运行。出于这个原因。yii提供了一个数据库迁移工具,可以保持代码和数据库是同步。方便数据库的回滚和更新。功能正如描述。主要提供了数据库迁移功能。命令格式yiic migrate [action] [parameter]action参数用来制定执行哪一个迁移任务。可以一使用up, down, to, create, history, new, mark.这些命令如果没有action参数,默认为upparameter根据action的不同而有所变化。上述例子中给出了说明。官方也给出了详细的例子。http://www.yiiframework.com/doc/guide/1.1/zh_cn/database.migration#creating-migrations这里不再详细累述。用到的时候参考使用就可以了。补充:yii2.0使用migrate创建后台登陆重新创建一张数据表来完成后台登陆验证为了大家看得明白,直接贴代码一、使用Migration创建表adminconsole/migrations/m130524_201442_init.phpuse yii/db/Schema;use yii/db/Migration;class m130524_201442_init extends Migration const TBL_NAME = '{{%admin}}'; public function safeUp() $tableOptions = null; if ($this- db- driverName === 'mysql') { // http://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB'; $this- createTable(self::TBL_NAME, [ 'id' = Schema::TYPE_PK, 'username' = Schema::TYPE_STRING . ' NOT NULL', 'auth_key' = Schema::TYPE_STRING . '(32) NOT NULL', 'password_hash' = Schema::TYPE_STRING . ' NOT NULL', //密码 'password_reset_token' = Schema::TYPE_STRING, 'email' = Schema::TYPE_STRING . ' NOT NULL', 'role' = Schema::TYPE_SMALLINT . ' NOT NULL DEFAULT 10', 'status' = Schema::TYPE_SMALLINT . ' NOT NULL DEFAULT 10', 'created_at' = Schema::TYPE_INTEGER . ' NOT NULL', 'updated_at' = Schema::TYPE_INTEGER . ' NOT NULL', ], $tableOptions); $this- createIndex('username', self::TBL_NAME, ['username'],true); $this- createIndex('email', self::TBL_NAME, ['email'],true); public function safeDown() $this- dropTable(self::TBL_NAME);使用命令行来创建admin数据库1、win7下使用命令:在项目根目下,右键选择User composer here(前提是安装了全局的composer),
yii migrate即创建数据表 admin成功2、linux下命令一样(此处略)二、使用gii创建模型此处略,很简单的步聚。注:把admin模型创在 backend/models下面 (放哪里看个人喜好)
代码如下namespace backend/models;use Yii;use yii/base/NotSupportedException;use yii/behaviors/TimestampBehavior;use yii/db/ActiveRecord;use yii/web/IdentityInterface; * This is the model class for table "{{%admin}}". * @property integer $id * @property string $username * @property string $auth_key * @property string $password_hash * @property string $password_reset_token * @property string $email * @property integer $role * @property integer $status * @property integer $created_at * @property integer $updated_atclass AgAdmin extends ActiveRecord implements IdentityInterface const STATUS_DELETED = 0; const STATUS_ACTIVE = 10; const ROLE_USER = 10; const AUTH_KEY = '123456'; * @inheritdoc public static function tableName() return '{{%admin}}'; * @inheritdoc public function behaviors() return [ TimestampBehavior::className(), * @inheritdoc public function rules() return [ [['username', 'email',], 'required'], [['username', 'email'], 'string', 'max' = 255], [['username'], 'unique'], [['username'], 'match', 'pattern'= '/^[a-z]/w*$/i'], [['email'], 'unique'], [['email'], 'email'], ['status', 'default', 'value' = self::STATUS_ACTIVE], ['status', 'in', 'range' = [self::STATUS_ACTIVE, self::STATUS_DELETED]], ['role', 'default', 'value' = self::ROLE_USER], ['auth_key', 'default', 'value' = self::AUTH_KEY], ['role', 'in', 'range' = [self::ROLE_USER]], * @inheritdoc public static function findIdentity($id) return static::findOne(['id' = $id, 'status' = self::STATUS_ACTIVE]); * @inheritdoc public static function findIdentityByAccessToken($token, $type = null) return static::findOne(['access_token' = $token]); //throw new NotSupportedException('"findIdentityByAccessToken" is not implemented.'); * Finds user by username * @param string $username * @return static|null public static function findByUsername($username) return static::findOne(['username' = $username, 'status' = self::STATUS_ACTIVE]); * Finds user by password reset token * @param string $token password reset token * @return static|null public static function findByPasswordResetToken($token) if (!static::isPasswordResetTokenValid($token)) { return null; return static::findOne([ 'password_reset_token' = $token, 'status' = self::STATUS_ACTIVE, * Finds out if password reset token is valid * @param string $token password reset token * @return boolean public static function isPasswordResetTokenValid($token) if (empty($token)) { return false; $expire = Yii::$app- params['user.passwordResetTokenExpire']; $parts = explode('_', $token); $timestamp = (int) end($parts); return $timestamp + $expire = time(); * @inheritdoc public function getId() return $this- getPrimaryKey(); * @inheritdoc public function getAuthKey() return $this- auth_key; * @inheritdoc public function validateAuthKey($authKey) return $this- getAuthKey() === $authKey; * Validates password * @param string $password password to validate * @return boolean if password provided is valid for current user public function validatePassword($password) return Yii::$app- security- validatePassword($password, $this- password_hash); * Generates password hash from password and sets it to the model * @param string $password public function setPassword($password) $this- password_hash = Yii::$app- security- generatePasswordHash($password); * Generates "remember me" authentication key public function generateAuthKey() $this- auth_key = Yii::$app- security- generateRandomString(); * Generates new password reset token public function generatePasswordResetToken() $this- password_reset_token = Yii::$app- security- generateRandomString() . '_' . time(); * Removes password reset token public function removePasswordResetToken() $this- password_reset_token = null;三、使用migrate 为后如初使化一个登陆帐号1、console/controllers创建InitController.php * @author chan maclechan@qq.com namespace console/controllers;use backend/models/Admin ;class InitController extends /yii/console/Controller * Create init user public function actionAdmin() echo "创建一个新用户 .../n"; // 提示当前操作 $username = $this- prompt('User Name:'); // 接收用户名 $email = $this- prompt('Email:'); // 接收Email $password = $this- prompt('Password:'); // 接收密码 $model = new AgAdmin(); // 创建一个新用户 $model- username = $username; // 完成赋值 $model- email = $email; $model- password = $password; if (!$model- save()) // 保存新的用户 foreach ($model- getErrors() as $error) // 如果保存失败,说明有错误,那就输出错误信息。 foreach ($error as $e) echo "$e/n"; return 1; // 命令行返回1表示有异常 return 0; // 返回0表示一切OK2、使用命令:在项目根目下,右键选择User composer here(前提是安装了全局的composer),
yii init/admin到此,打开数据表看下,己经有了数据。四、后台登陆验证1、backend/controllers/SiteController.php 里actionLogin方法不用变2、把common/models/LoginForm.php复制到backend/models只要把LoginForm.php里面的方法getUser()修改一个单词即可,如下public function getUser() if ($this- _user === false) { $this- _user = Admin::findByUsername($this- username); return $this- _user;3、backend/config/main.php 只要修改'user' = [ 'identityClass' = 'backend/models/Admin', 'enableAutoLogin' = true,此外,在作修改时,请注意下命令空不要搞乱了。到此,结束。更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。PHP教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表