Yii是一個基於組件的高性能PHP框架,用於快速開發Web應用程序(下面內容基於Yii 1.1)php
index.php
發起請求config.php
並建立一個應用主體Request
解析請求的路由Response
index.php
<?php /// 定義全局變量,在生產環境中請刪除此行 defined('YII_DEBUG') or define('YII_DEBUG',true); // 包含Yii引導文件 require_once('path/to/yii/framework/yii.php'); // 讀取配置文件 $configFile='path/to/config/file.php'; // 建立一個應用實例並執行 Yii::createWebApplication($configFile)->run(); ?>
config.php
應用主體的相關配置,能夠內部屬性能夠經過Yii::app()->attributeName
訪問mysql
<?php $config = [ 'id' => 'basic', //應用主體ID 'basePath' => dirname(__DIR__), //應用的根路徑 'language' => 'zh-CN', //網頁語言 'defaultRoute' => 'post/index', //默認路由 'components' => [ //註冊組件 'db'=>array( 'class' => 'system.db.CDbConnection', 'connectionString' => 'mysql:host=mysql56.rdsm1whs0okm6y4.rds.bj.baidubce.com;dbname=crowd_test', 'emulatePrepare' => true, 'username' => 'crowdtest', 'password' => 'unittest_sdcqa', 'charset' => 'utf8', ), 'fixture' => array( 'class' => 'crowdtest.tests.test.CDbFixtureManager', 'basePath' => dirname(__FILE__) . '/../fixtures/', ), ] ]; return $config; ?>
Model
模型是MVC架構中的M,由CModel或其子類(如CActiveRecord、CFormModel)繼承而來,是表現業務數據、規則和邏輯的對象,表單模型(CFormModel)用於保持從用戶的輸入獲取的數據, 這些數據常常被獲取,使用,而後丟棄。Active Record (AR) 是一種用於經過面向對象的風格抽象化數據庫訪問的設計模式。sql
<?php class ContactForm extends CFormModel { //【業務數據】 public $name; public $email; public $verifyCode; //【業務規則】 // array('AttributeList', 'Validator', 'on'=>'ScenarioList', ...附加選項) // Validator: required,email,length,captcha,url,boolean等等 public function rules(){ return array( array('name,email','required'), array('email','email'), array('name', 'length', 'min'=>3, 'max'=>12), array('verifyCode','captcha'), ); ]; } //屬性在頁面中的顯示內容 public function attributeLabels() { return array( 'name' => '姓名' ); } //【業務邏輯】 public function contact($email){ } } ?>
數據訪問對象(DAO) 對訪問存儲在不一樣數據庫管理系統(DBMS)中的數據提供了一個通用的API。數據庫
$connection=Yii::app()->db;//CDbConection實例,表明一個數據庫鏈接 $command=$connection->createCommand($sql) //CDbCommand實例,表明Sql指令 $command->bindValue(); //綁定變量 $command->query(); //執行查詢 $command->queryRow(); //執行查詢並返回結果中的第一行 $command->execute(); //執行操做,刪除、新增等
Active Record(AR)是一個流行的對象-關係映射(ORM)技術,經過面向對象的方式來操縱數據庫,大大提升了代碼的可維護性,每一個 AR類表明一個數據表,數據表的列在 AR 類中體現爲類的屬性,一個 AR 實例則表示表中的一行。設計模式
<?php class User extends CActiveRecord { //Required,返回一個此類可調用的實例 public static function model($className=__CLASS__) { return parent::model($className); } //設置數據庫中對應的數據表 public function tableName() { return 'tbl_post'; } //不一樣表之間的關聯關係 //BELONGS_TO 屬於 1:n //HAS_MANY 有多個 m:1 //HAS_ONE 有一個 1:1 //MANY_MANY 多對多 m:n public function relations(){ return array( 'article'=>array(self::HAS_MANY, 'Article', 'user_id'), ); } public function myfunc(){ //CURD } } ?>
增長(Create)api
<?php $model = new User(); $model->name = "Lee"; $model->age = "18"; //save中會自動執行rules中的規則檢查,根據檢查結果返回true或者false if($model->save()){ #code } ?>
查詢(research)瀏覽器
<?php // 查找知足指定條件的結果中的第一行 $user=User::model()->find($condition,$params); $user = User::model()->find("name=:name",array(':name'=>$name)); // 查找具備指定主鍵值的那一行 $user=User::model()->findByPk($userID,$condition,$params); // 查找具備指定屬性值的行 $user=User::model()->findByAttributes($attributes,$condition,$params); // 經過指定的 SQL 語句查找結果中的第一行 $user=User::model()->findBySql($sql,$params); //經過構建CDbCriteria實例完成更復雜的操做 $criteria=new CDbCriteria; $criteria->select='email'; // 只選擇 'email' 列 $criteria->condition='user_id=:user_id'; $criteria->params=array(':user_id'=>$id); $user=User::model()->find($criteria); // $params 不須要了 ?>
<?php $user=User::model()->findByPk(3); $user->username='newName'; $user->save(); // 將更改保存到數據庫 ?>
<?php $user=User::model()->findByPk(10); // 假設有一個用戶,其 ID 爲 10 $user->delete(); // 從數據表中刪除此行 User::model()->deleteAll("type='test'"); ?>
<?php //懶加載,使用該屬性再取回 $user=User::model()->findByPk(1); $user->article; //渴求加載,一次性取回 $user=User::model()->with('article')->findAll(); ?>
Controller
控制器是MVC中的C,由CController繼承而來,負責處理請求以及生成響應,一個控制器的聲明週期以下:session
st=>start: 建立Controller實例 e=>end: 結束 op0=>operation: 執行CController:init()方法 op1=>operation: 肯定操做ID建立操做(默認操做/獨立操做/內聯操做/異常) op2=>operation: 依次調用應用主體、模塊、控制器的beforeAction()方法 op3=>operation: 控制器執行操做(請求數據解析和填入到操做參數) op4=>operation: 依次調用應用主體、模塊、控制器的afterAction()方法 op5=>operation: 應用主體獲取操做結果並賦值給響應 st->op0->op1->op2->op3->op4->op5->e
一個簡單的控制器文件以下所示,主要由執行過濾和一系列動做組成。架構
<?php Class SiteController extend CController{ //執行過濾 public function filters(){...} //指定一些通用的action public function actions(){...} public function actionIndex(){...} public function actionLogin(){...} public function actionContact() { //設置對應layout佈局,不須要時將該值設爲false,默認view/layouts/main.php $this->layout = 'newLayout'; //構建模型實例 $model = new ContactForm(); //根據POST的內容渲染視圖 if ($model->load(Yii::app()->request->post()) && $model->contact(Yii::app()->params['adminEmail'])) { Yii::$app->session->setFlash('contactFormSubmitted'); return $this->refresh(); } return $this->render('contact', [ 'model' => $model, ]); } } ?>
View
視圖是MVC架構中的V,用於展現從數據到終端用戶的代碼app
視圖方面推薦Smarty3,比原生View要簡潔高效不少,相關教程後續加上。
Reference:
http://www.yiiframework.com/doc/guide/1.1/zh_cn/index
http://www.yiichina.com/doc/api/1.1
博文做者:vicfeel
博文出處:http://www.cnblogs.com/vicfeel 本文版權歸做者和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文連接,謝謝合做! 若是閱讀了本文章,以爲有幫助,您能夠爲個人博文點擊「推薦一下」!