백엔드 개발 PHP 튜토리얼 YII Framework框架使用YIIC快速创建YII应用之migrate用法实例详解_php实例

YII Framework框架使用YIIC快速创建YII应用之migrate用法实例详解_php实例

Jun 07, 2016 pm 05:08 PM
framework migrate yii 만들다

本文实例讲述了YII Framework框架使用YIIC快速创建YII应用之migrate用法。分享给大家供大家参考,具体如下:

yii migrate

查看帮助

/*
/www/yii_dev/yii/framework# php yiic migrate help
Error: Unknown action: help
USAGE
 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 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 migrate
Applies ALL new migrations. This is equivalent to 'yiic migrate to'.
* yiic migrate create create_user_table
Creates a new migration named 'create_user_table'.
* yiic migrate up 3
Applies the next 3 new migrations.
* yiic migrate down
Reverts the last applied migration.
* yiic migrate down 3
Reverts the last 3 applied migrations.
* yiic migrate to 101129_185401
Migrates up or down to version 101129_185401.
* yiic migrate mark 101129_185401
Modifies the migration history up or down to version 101129_185401.
No actual migration will be performed.
* yiic migrate history
Shows all previously applied migration information.
* yiic migrate history 10
Shows the last 10 applied migrations.
* yiic migrate new
Shows all new migrations.
* yiic migrate new 10
Shows the next 10 migrations that have not been applied.
*/

로그인 후 복사

在我们开发程序的过程中,数据库的结构也是不断调整的。我们的开发中要保证代码和数据库库的同步。因为我们的应用离不开数据库。例如: 在开发过程中,我们经常需要增加一个新的表,或者我们后期投入运营的产品,可能需要为某一列添加索引。我们必须保持数据结构和代码的一致性。如果代码和数据库不同步,可能整个系统将无法正常运行。出于这个原因。yii提供了一个数据库迁移工具,可以保持代码和数据库是同步。方便数据库的回滚和更新。

功能正如描述。主要提供了数据库迁移功能。

命令格式

yiic migrate [action] [parameter]

action参数用来制定执行哪一个迁移任务。可以一使用

up, down, to, create, history, new, mark.这些命令

如果没有action参数,默认为up

parameter根据action的不同而有所变化。

上述例子中给出了说明。

官方也给出了详细的例子。

http://www.yiiframework.com/doc/guide/1.1/zh_cn/database.migration#creating-migrations

这里不再详细累述。用到的时候参考使用就可以了。

补充:yii2.0使用migrate创建后台登陆

重新创建一张数据表来完成后台登陆验证

为了大家看得明白,直接贴代码

一、使用Migration创建表admin

console\migrations\m130524_201442_init.php

use 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_at
 */
class 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表示一切OK
  }
}

로그인 후 복사

2、使用命令:

在项目根目下,右键选择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程序设计有所帮助。

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Python에서 상수를 만드는 방법은 무엇입니까? Python에서 상수를 만드는 방법은 무엇입니까? Aug 29, 2023 pm 05:17 PM

상수와 변수는 프로그래밍에서 데이터 값을 저장하는 데 사용됩니다. 변수는 일반적으로 시간이 지남에 따라 변경될 수 있는 값을 나타냅니다. 상수는 프로그램 실행 중에 값을 변경할 수 없는 변수 유형입니다. Python에서 사용할 수 있는 내장 상수는 6개뿐입니다. 이는 False, True, None, NotImplemented, Ellipsis(...) 및 __debug__입니다. 이러한 상수 외에도 Python에는 상수 값을 저장하는 내장 데이터 유형이 없습니다. 예 상수의 예는 아래에 설명되어 있습니다. False=100 출력 SyntaxError:cannotsigntoFalseFalse는 부울 값을 저장하는 데 사용되는 Python의 내장 상수입니다.

최신 iOS 17에서 iPhone을 개인화하는 방법 최신 iOS 17에서 iPhone을 개인화하는 방법 Sep 21, 2023 am 08:17 AM

iPhone에서 통화를 개인화하는 방법 Apple의 iOS 17에는 iPhone의 통화 화면 모양을 개인화할 수 있는 연락처 포스터라는 새로운 기능이 도입되었습니다. 이 기능을 사용하면 선택한 사진, 색상, 글꼴, 미모티콘을 연락처 카드로 사용하여 포스터를 디자인할 수 있습니다. 따라서 전화를 걸면 사용자 정의 이미지가 수신자의 iPhone에 예상한 대로 정확하게 표시됩니다. 저장된 모든 연락처와 고유한 연락처 포스터를 공유하도록 선택하거나 이를 볼 수 있는 사람을 선택할 수 있습니다. 마찬가지로, 통화 중에 다른 사람의 연락처 포스터도 볼 수 있습니다. 또한 Apple에서는 개별 연락처에 대한 특정 연락처 사진을 설정하여 해당 연락처에서 전화를 걸 수 있습니다.

김프에서 픽셀 아트를 만드는 방법 김프에서 픽셀 아트를 만드는 방법 Feb 19, 2024 pm 03:24 PM

Windows에서 픽셀 아트 제작을 위해 김프를 사용하는 데 관심이 있다면 이 기사가 흥미로울 것입니다. GIMP는 무료 오픈 소스일 뿐만 아니라 사용자가 아름다운 이미지와 디자인을 쉽게 만들 수 있도록 도와주는 잘 알려진 그래픽 편집 소프트웨어입니다. 초보자와 전문 디자이너 모두에게 적합할 뿐만 아니라, 김프는 그리기와 창작을 위한 유일한 구성 요소로 픽셀을 활용하는 디지털 아트의 한 형태인 픽셀 아트를 만드는 데에도 사용할 수 있습니다. 김프에서 픽셀 아트를 만드는 방법 Windows PC에서 김프를 사용하여 픽셀 그림을 만드는 주요 단계는 다음과 같습니다. 김프를 다운로드하여 설치한 다음 응용 프로그램을 시작합니다. 새 이미지를 만듭니다. 너비와 높이의 크기를 조정합니다. 연필 도구를 선택합니다. 브러시 유형을 픽셀로 설정합니다. 설정

Realme Phone에서 폴더를 만드는 방법은 무엇입니까? Realme Phone에서 폴더를 만드는 방법은 무엇입니까? Mar 23, 2024 pm 02:30 PM

제목: Realme Phone 초보자 가이드: Realme Phone에서 폴더를 만드는 방법은 무엇입니까? 현대 사회에서 휴대폰은 사람들의 삶에 없어서는 안 될 도구가 되었습니다. 인기 스마트폰 브랜드인 Realme Phone은 간단하고 실용적인 운영 체제로 사용자들에게 사랑을 받고 있습니다. Realme 휴대폰을 사용하는 과정에서 많은 사람들이 휴대폰에 있는 파일과 애플리케이션을 정리해야 하는 상황에 직면할 수 있는데, 폴더를 만드는 것이 효과적인 방법입니다. 이 기사에서는 사용자가 휴대폰 콘텐츠를 더 잘 관리할 수 있도록 Realme 휴대폰에서 폴더를 만드는 방법을 소개합니다. 아니요.

Gree+로 가족을 만드는 방법 Gree+로 가족을 만드는 방법 Mar 01, 2024 pm 12:40 PM

많은 친구들이 Gree+ 소프트웨어에서 가족을 만드는 방법을 알고 싶다고 말했습니다. 자세한 내용을 알고 싶은 친구들은 저와 함께 살펴보세요. 먼저 휴대폰에서 Gree+ 소프트웨어를 열고 로그인하세요. 그런 다음 페이지 하단의 옵션 표시줄에서 맨 오른쪽에 있는 "내" 옵션을 클릭하여 개인 계정 페이지로 들어갑니다. 2. 내 페이지에 접속한 후 "가족" 아래에 "가족 만들기" 옵션이 있습니다. 찾은 후 클릭하여 들어갑니다. 3. 다음으로 가족을 생성하는 페이지로 이동하여 프롬프트에 따라 입력 상자에 설정할 가족 이름을 입력하고 입력 후 오른쪽 상단의 "저장" 버튼을 클릭합니다. 4. 마지막으로 페이지 하단에 "저장 성공" 메시지가 나타나 패밀리가 성공적으로 생성되었음을 나타냅니다.

Python을 통해 사용자 인터페이스를 만드는 방법은 무엇입니까? Python을 통해 사용자 인터페이스를 만드는 방법은 무엇입니까? Aug 26, 2023 am 09:17 AM

이번 글에서는 Python을 사용하여 사용자 인터페이스를 만드는 방법을 알아봅니다. 그래픽 사용자 인터페이스란 무엇입니까? "그래픽 사용자 인터페이스"(또는 "GUI")라는 용어는 정보를 표시하고 상호 작용하기 위해 컴퓨터 소프트웨어에서 상호 작용할 수 있는 일련의 시각적 요소 항목을 의미합니다. 사람의 입력에 따라 객체는 색상, 크기, 가시성과 같은 모양 특성을 변경할 수 있습니다. 아이콘, 커서 및 버튼과 같은 그래픽 구성 요소는 오디오 또는 시각적 효과(예: 투명도)를 통해 향상되어 그래픽 사용자 인터페이스(GUI)를 만들 수 있습니다. 더 많은 사람들이 귀하의 플랫폼을 사용하기를 원한다면, 귀하의 플랫폼이 좋은 사용자 인터페이스를 가지고 있는지 확인해야 합니다. 이러한 요소들의 조합이 앱이나 웹사이트에서 제공하는 서비스 품질에 큰 영향을 미칠 수 있기 때문입니다. Python은 다음과 같은 기능을 제공하므로 개발자가 널리 사용합니다.

Highcharts를 사용하여 Gantt 차트를 만드는 방법 Highcharts를 사용하여 Gantt 차트를 만드는 방법 Dec 17, 2023 pm 07:23 PM

Highcharts를 사용하여 간트 차트를 만드는 방법에는 특정 코드 예제가 필요합니다. 소개: 간트 차트는 프로젝트 진행 상황 및 시간 관리를 표시하는 데 일반적으로 사용되는 차트 형식으로 작업의 시작 시간, 종료 시간 및 진행 상황을 시각적으로 표시할 수 있습니다. Highcharts는 풍부한 차트 유형과 유연한 구성 옵션을 제공하는 강력한 JavaScript 차트 라이브러리입니다. 이 기사에서는 Highcharts를 사용하여 Gantt 차트를 만드는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. 하이차트

iPhone용 연락처 포스터를 만드는 방법 iPhone용 연락처 포스터를 만드는 방법 Mar 02, 2024 am 11:30 AM

iOS17에서 Apple은 일반적으로 사용되는 전화 및 연락처 앱에 연락처 포스터 기능을 추가했습니다. 이 기능을 통해 사용자는 각 연락처에 대해 개인화된 포스터를 설정할 수 있어 주소록을 더욱 시각적이고 개인적으로 만들 수 있습니다. 연락처 포스터는 사용자가 특정 연락처를 더 빠르게 식별하고 찾는 데 도움이 되어 사용자 경험을 향상시킵니다. 이 기능을 통해 사용자는 자신의 선호도와 요구 사항에 따라 각 연락처에 특정 사진이나 로고를 추가할 수 있어 주소록 인터페이스가 더욱 생생해집니다. iOS17의 Apple은 iPhone 사용자에게 자신을 표현하는 새로운 방법을 제공하고 개인화 가능한 연락처 포스터를 추가했습니다. 연락처 포스터 기능을 사용하면 다른 iPhone 사용자에게 전화할 때 고유하고 개인화된 콘텐츠를 표시할 수 있습니다. 너

See all articles