1、安裝php
php運行環境安裝包:http://www.phpstudy.net/a.php/207.htmlhtml
Yii安裝包:mysql
https://github.com/yiisoft/yii2/releases/download/2.0.6/yii-basic-app-2.0.6.tgz (Yii2的基本應用程序模板)git
https://github.com/yiisoft/yii2/releases/download/2.0.6/yii-advanced-app-2.0.6.tgz (Yii2的高級應用程序模板)github
下載 Yii2的基本應用程序模板 完畢後解壓到網站根目錄。web
個人網站根目錄是:F:\testyiisql
域名是:www.testyii.com數據庫
訪問 http://www.testyii.com/requirements.php 檢查安裝環境。api
注意php版本必須是5.4以上。數組
配置cookie驗證密鑰: 文件 F:\testyii\config\web.php 裏面有個 cookieValidationKey 項 隨便給個abcd字符便可
訪問 http://www.testyii.com/web/index.php 看到 Congratulations! 表示安裝完畢了。
2、控制器
控制器文件地址:F:\testyii\controllers
建立格式:
<?php namespace app\controllers; //控制器的命名空間 use yii\web\Controller; //控制器繼承的 Controller 類的命名空間 use \YII; //框架全局類的命名空間 class TestController extends Controller //控制器命名格式 名稱Controller 駝峯法命名 文件名(TestController.php)與類名一致 { public function actionIndex() { //操做命名格式 action操做名 echo 'hello word'; } }
訪問格式:請求入口?r=控制器名/操做名
例如:http://www.testyii.com/web/index.php?r=test/index
注意訪問這裏的控制器名與操做名不區分大小寫。
控制器父類源代碼是 F:\testyii\vendor\yiisoft\yii2\web\Controller.php
控制能夠使用父類的public方法和屬性 例如使用跳轉方法 redirect($url, $statusCode = 302)
3、接收變量
<?php namespace app\controllers; //控制器的命名空間 use yii\web\Controller; //控制器繼承的 Controller 類的命名空間 use \YII; //框架全局類的命名空間 class TestController extends Controller //控制器命名格式 名稱Controller 駝峯法命名 文件名(TestController.php)與類名一致 { public function actionIndex() { //操做命名格式 action操做名 $request = YII::$app->request; //經過全局類 YII 獲得請求組件 $request $id = $request->get('id','default'); //經過請求組件的get方法獲得GET傳遞過來的數據 echo $id; //若是傳遞了 id 則輸出id 沒有傳遞 則輸出 default } }
請求組件的源代碼是 F:\testyii\vendor\yiisoft\yii2\web\Request.php
裏面有不少方法可供使用 例如接受POST變量的 post 方法
3、SESSION 處理
<?php namespace app\controllers; //控制器的命名空間 use yii\web\Controller; //控制器繼承的 Controller 類的命名空間 use \YII; //框架全局類的命名空間 class TestController extends Controller //控制器命名格式 名稱Controller 駝峯法命名 文件名(TestController.php)與類名一致 { public function actionIndex() { //操做命名格式 action操做名 $session = YII::$app->session; //獲得session組件 $session $session->open(); //開啓session $session['name'] = '張三'; //寫入session $name = $session['name']; //讀取session unset($session['name']); //刪除session中的某個值 $session->destroy(); //銷燬session echo $name; } }
上面的代碼中,我經過YII全局類獲得$session組件,這個組件是一個對象,可是緊接着我卻把它看成數組進行操做。是由於session組件實現了php內置的ArrayAccess接口。
session組件的源碼是:F:\testyii\vendor\yiisoft\yii2\web\Session.php
4、COOKIE 處理
<?php namespace app\controllers; //控制器的命名空間 use yii\web\Controller; //控制器繼承的 Controller 類的命名空間 use \YII; //框架全局類的命名空間 use yii\web\Cookie; class TestController extends Controller //控制器命名格式 名稱Controller 駝峯法命名 文件名(TestController.php)與類名一致 { public function actionIndex() { //操做命名格式 action操做名 //獲得響應組件裏面的cookies對象 $cookies = YII::$app->response->cookies; //等待寫入的cookie數據 $cookie_1 = array('name'=>'age','value'=>18); $cookie_2 = array('name'=>'gender','value'=>'male'); //add方法接受一個Cookie類生成的對象 $cookies->add(new Cookie($cookie_1)); //寫入cookie $cookies->add(new Cookie($cookie_2)); echo $cookies['age']; //讀取cookie unset($cookies['age']); //刪除cookie } }
注意這裏的代碼又 use 了一個命名空間。
Cookie類的源碼是:F:\testyii\vendor\yiisoft\yii2\web\Cookie.php
從源碼中可看到,等待寫入cookie的數組,除了name value 外 還能夠有 domain expire path secure httpOnly 等數據
響應組件裏面的cookies對象的生成類源碼:F:\testyii\vendor\yiisoft\yii2\web\CookieCollection.php
從源碼中能夠看到 它有個 getValue($name, $defaultValue = null) 方法也很實用。
5、數據模型
準備兩張表:
CREATE TABLE `user` ( `uid` int(11) NOT NULL AUTO_INCREMENT COMMENT '用戶ID', `uname` varchar(20) NOT NULL DEFAULT '' COMMENT '用戶名', `upass` varchar(50) NOT NULL DEFAULT '' COMMENT '密碼', PRIMARY KEY (`uid`) ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='用戶表'; CREATE TABLE `log` ( `log_id` int(11) unsigned NOT NULL AUTO_INCREMENT, `uid` int(11) NOT NULL DEFAULT '0' COMMENT '操做者id', `content` varchar(8000) NOT NULL DEFAULT '' COMMENT '操做內容', `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '建立時間', PRIMARY KEY (`log_id`) ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='用戶操做日誌表';
配置Yii鏈接數據庫的信息:F:\testyii\config\db.php
<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=test', //指定數據庫 'username' => 'root', 'password' => 'root', 'charset' => 'utf8', ];
模型文件地址:F:\testyii\models
建立模型:
文件夾 F:\testyii\models 下有個 User.php 與我剛纔建立的User表名字有衝突,我把它作個備份,而後建立一個新的 User.php
模型的名字與類名字與表名字保持一致。
<?php namespace app\models; //模型必須放在 這個命名空間中 use yii\db\ActiveRecord; //模型繼承的類的命名空間 class User extends ActiveRecord { }
ActiveRecord 類的源碼地址:F:\testyii\vendor\yiisoft\yii2\db
使用模型之插入數據:
插入表單以前我先在模型中建立一個驗證規則,更多關於驗證器的信息 http://www.yiichina.com/doc/guide/2.0/tutorial-core-validators
<?php namespace app\models; //模型必須放在 這個命名空間中 use yii\db\ActiveRecord; //模型繼承的類的命名空間 class User extends ActiveRecord { public function rules() { return [ [['uname', 'upass'], 'trim'], //去掉空格 [['uname', 'upass'], 'required'], //必須填寫 ['uname', 'string', 'min'=>5, 'max'=>20 ], //限制字符長度 ['upass', 'string', 'min'=>6, 'max'=>50 ], ]; } }
再回到控制器中,使用user模型插入數據
<?php namespace app\controllers; //控制器的命名空間 use yii\web\Controller; //控制器繼承的 Controller 類的命名空間 use \YII; //框架全局類的命名空間 use app\models\User; class TestController extends Controller //控制器命名格式 名稱Controller 駝峯法命名 文件名(TestController.php)與類名一致 { public function actionIndex() { //操做命名格式 action操做名 $user = new User; //實例化模型對象 $user->uname = 'zhangsan'; //待插入的數據 $user->upass= '888888'; //驗證數據 成功返回 true 失敗 返回 false if(!$user->validate()) die('error'); $uid = $user->save(); //插入數據 $uid = $user->attributes['uid']; //獲得自增id echo $uid; } }
使用模型之查找數據:
<?php namespace app\controllers; //控制器的命名空間 use yii\web\Controller; //控制器繼承的 Controller 類的命名空間 use \YII; //框架全局類的命名空間 use app\models\User; class TestController extends Controller //控制器命名格式 名稱Controller 駝峯法命名 文件名(TestController.php)與類名一致 { public function actionIndex() { //操做命名格式 action操做名 $user = new User; //實例化模型對象 //1.執行一條查詢語句 $sql = "select * from user"; $results = $user->findBySql($sql)->all(); //all方法返回一個二維數組 one方法返回一維數組 $one_user = $results[0]->attributes(); //獲得一條記錄的全部數據 $one_user_name = $results[0]->uname; //獲得一條記錄的某個值 //print_r($one_user); //print_r($one_user_name); //2.查詢一條記錄 $results = User::find()->where(['uid' => 1])->one()->toArray(); //這裏直接返回了數組格式 print_r($results); } }
關於更多的查詢信息 http://www.yiichina.com/doc/api/2.0/yii-db-activerecord
使用模型之修改數據:
<?php namespace app\controllers; //控制器的命名空間 use yii\web\Controller; //控制器繼承的 Controller 類的命名空間 use \YII; //框架全局類的命名空間 use app\models\User; class TestController extends Controller //控制器命名格式 名稱Controller 駝峯法命名 文件名(TestController.php)與類名一致 { public function actionIndex() { //操做命名格式 action操做名 $user_obj = User::findOne(1); //獲得主鍵uid爲1的數據的對象 $user_obj->upass = 111111; //修改密碼 if ($user_obj->update() !== false) { echo 'update successful'; } else { echo 'update failed'; } } }
使用模型之刪除數據:
<?php namespace app\controllers; //控制器的命名空間 use yii\web\Controller; //控制器繼承的 Controller 類的命名空間 use \YII; //框架全局類的命名空間 use app\models\User; class TestController extends Controller //控制器命名格式 名稱Controller 駝峯法命名 文件名(TestController.php)與類名一致 { public function actionIndex() { //操做命名格式 action操做名 $user_obj = User::findOne(1); //獲得主鍵uid爲1的數據的對象 if ($user_obj->delete() !== false) { echo 'delete successful'; } else { echo 'delete failed'; } } }
使用模型之關聯查詢:
下面演示用戶表關聯用戶日誌表的關聯操做。
給log表插入兩條記錄
INSERT INTO `log` VALUES ('1', '2', '呵呵', '10'); INSERT INTO `log` VALUES ('2', '2', '哈哈', '20');
再建立一個日誌模型 F:\testyii\models\Log.php。
<?php namespace app\models; //模型必須放在 這個命名空間中 use yii\db\ActiveRecord; //模型繼承的類的命名空間 class Log extends ActiveRecord { }
再回到控制器中
<?php namespace app\controllers; //控制器的命名空間 use yii\web\Controller; //控制器繼承的 Controller 類的命名空間 use \YII; //框架全局類的命名空間 use app\models\User; use app\models\Log; class TestController extends Controller //控制器命名格式 名稱Controller 駝峯法命名 文件名(TestController.php)與類名一致 { public function actionIndex() { //操做命名格式 action操做名 //一對多關係的查詢 $user_obj = User::findOne(2); $logs = $user_obj->hasMany('app\models\Log',['uid'=>'uid'])->asArray()->all(); //第一個uid是 log表的 第二個uid是user表的 //print_r($logs); //一對一關係的查詢 $log_obj = Log::findOne(1); $user = $log_obj->hasOne(User::className(),['uid'=>'uid'])->asArray()->one(); //這段代碼最好放在 Log 模型裏面 print_r($user); } }
6、視圖
視圖文件地址:F:\testyii\views\控制器名\視圖名.php
建立視圖:F:\testyii\views\test\index.php
<?=$name?> <?=$age?>
<?=print_r($age)?>
調用視圖:
<?php namespace app\controllers; //控制器的命名空間 use yii\web\Controller; //控制器繼承的 Controller 類的命名空間 use \YII; //框架全局類的命名空間 class TestController extends Controller //控制器命名格式 名稱Controller 駝峯法命名 文件名(TestController.php)與類名一致 { public function actionIndex() { //操做命名格式 action操做名 $result = array('name'=>'張三','age'=>18,'arr'=>array('a','b')); return $this->renderPartial('index',$result); //調用視圖 並把變量注入到視圖中 } }
視圖中安全輸出數據:
<?php use yii\helpers\Html; //轉義 use yii\helpers\HtmlPurifier; //過濾 ?> <?=Html::encode($name)?> <?=HtmlPurifier::process($name)?>
關於視圖的更多信息 http://www.yiichina.com/doc/guide/2.0/structure-views