Yii2 各類使用記錄

 

Yii2 各類使用記錄

 
 
Composer
  • 基本用法
  • 安裝yii程序 
    composer create-project --prefer-dist yiisoft/yii2-app-basic basic
  • 經過composer.json安裝擴展 
    composer install
  • 更新本地composer擴展庫 
    composer update
  • 直接安裝某個composer擴展 
    composer require [options] [--] [vendor/packages]...

DAO

Yii的數據庫讀取對象,在PDO之上,DAO後有了Query Builder和ARjavascript

  • 基本使用方法
  • 得到數據庫鏈接 
    $conn = Yii::$app->db;
  • 執行數據庫查詢語句 
    Yii::$app->db->createCommand("SELECT * FROM `user`"); Yii::$app->db->createCommand("SELECT * FROM `user` WHERE uid=:uid",[":uid"=>1]); Yii::$app->db->createCommand("SELECT * FROM `user` WHERE uid=:uid")->addValue([":uid"=>1]);
  • SQL語句插入數據 
    Yii::$app->db
    ->createCommand('INSERT INTO user (email, password) VALUES("test3@example.com", "test3");')->execute();
  • 數組形式插入數據 
    Yii::$app->db->createCommand()->insert('user', [ 'email' => 'test4@example.com', 'password' => 'changeme7', 'first_name' => 'Test' ])->execute();
  • 批量插入數據 
    Yii::$app->db->createCommand()->batchInsert('user', ['email', 'password', 'first_name'], [ ['james.franklin@example.com', 'changeme7', 'James'], ['linda.marks@example.com', 'changeme7', 'Linda'] ['roger.martin@example.com', 'changeme7'] ])->execute();
  • 更新數據 
    Yii::$app->db->createCommand()->update('user', ['updated_at' => time()], 'id = 2')->execute();
  • 刪除數據 
    Yii::$app->db->createCommand()->delete('user', 'id = 3')->execute();
  • 獲取結果方法
  • 獲取全部數據(數組形式返回) 
    Yii::$app->db->createCommand("SELECT * FROM `user`")->queryAll(); 
  • 獲取一條數據(一維數組) 
    Yii::$app->db->createCommand("SELECT * FROM `user` WHERE id = 1")->queryOne();
  • 獲取一個值 
    Yii::$app->db->createCommand("SELECT count(*) AS total FROM `user` WHERE id = 1")->queryScalar();
  • 獲取某一列(放到一位數組中) 
    Yii::$app->db->createCommand("SELECT username FROM `user`")->queryColumn();

Logging

日誌功能php

  • 配置Log
  • 基本用法
  • trace 
    Yii::trace($message,$category)
  • info 
    Yii::info($message,$category)
  • warning 
    Yii::warning($message,$category)
  • error 
    Yii::error($message,$category)

Validator

數據驗證,最經常使用於模型的rules()函數css

  • 方法列表(Model中rules函數)
  • required 必須值 
    ["username",'required'] [["username","email"],'required'] [["username"],'required',"message"=>"{attribute}必須填寫"] [["username"],'required','requiredValue'=>"abei"] // 用戶填寫的值必須等於requiredValue才能經過驗證。
  • Email驗證 
    ["email",'email'] [["email","work_email"],'email'] 
  • Boolean驗證 
    ['sex', 'boolean', 'trueValue' => true, 'falseValue' => false, 'strict' => true];// 能夠認爲置頂 true / false 值。
  • captcha驗證碼 
    ['verificationCode', 'captcha'];
  • compare比較 
    ['username', 'compare', 'compareAttribute' => 'province','message'=>'username和province必須同樣'] //錯誤信息將提示給username ['age', 'compare', 'compareValue' => 30, 'operator' => '>=','type' => 'number'];//compareValue:比較常量值 operator:比較操做符 type爲值類型,默認爲string,會一個每一個字符對比,若爲number則直接判斷數值 // operator 待選值==、===、!=、!==、>、>=、<、<=
  • date驗證 
    ["birth","date","format"=>"Y-m-d"]
  • default驗證 
    ['age','default','value'=>null] // 當age爲空的時候設置爲null ['country','default','value'=>'USA'] // 當 country爲空時設置爲USA /* 若是from爲空,則=今天+3天,若是to爲空,則=今天+6天 */ [['from','to'],'default','value'=>function($model,$attribute){ return date('Y-m-d', strtotime($attribute === 'to' ? '+3 days' : '+6 days')); }] 
  • double/number驗證 
    ['v','double'] // 判斷v是否爲數字 ['v','double','max'=>90,'min'=>1]//判斷v是否爲數字且大於等於一、小於等於90
  • 數組各元素驗證 
    /* 要求驗證的元素必須爲數組,不然會返回假並報錯 */ ["categoryIds","each","rule"=>['integer']]
  • exist是否存在驗證 
    /* 所謂對存在的檢查實質爲where的與操做,必須同時瞞住的記錄存在方可。兄弟們能夠研究下,exist是對sql語句EXISTS的應用*/ ["username","exist"] // username輸入的值已經存在 ["username","exist","targetAttribute"=>"province"] // username的輸入值必須在province列存在 ["username","exist",'targetAttribute' => ['username', 'province']] // username的輸入值必須在username和province中存在 [["username","province"],"exist",'targetAttribute' => ['username', 'province']] // username和province的輸入值必須在username和province中存在
  • file驗證 
    /* maxFiles表明一次最多傳幾個,mimeTypes表明上傳文件類型 */ ['primaryImage', 'file', 'extensions' => ['png', 'jpg', 'gif'],'mimeTypes'=>["image/*"], 'maxSize' => 1024*1024,'minSize'=>100*1024,'maxFiles'=>6,'checkExtensionByMimeType'=>true],
  • filter過濾驗證函數 
    [['username', 'email'], 'filter', 'filter' => 'trim', 'skipOnArray' => true], ['phone', 'filter', 'filter' => function ($value) { // normalize phone input here return $value; }],
  • image驗證 
    /* 上傳png/jpg格式,最大寬度不能超過1000px,最小寬度不能低於100px,最大高度不能高於1000px。最小高度不能低於100px */ ['primaryImage', 'image', 'extensions' => 'png, jpg','minWidth' => 100, 'maxWidth' => 1000,'minHeight' => 100, 'maxHeight' => 1000]
  • ip驗證 
    ["ip_addess","ip"] 
  • in方法驗證 
    ["level","in","range"=>[1,2,3]]
  • integer驗證 
    ["age",'integer']; ["age","integer","max"=>90,"min"=>1]
  • 正則匹配驗證 
    ["username","match","pattern"=>"/^[a-z]\w*$/i"]
  • safe驗證(多用於設置一個model的attribute) 
    ["description","safe"]
  • string驗證 
    ["username","string","length"=>[4,24]]; ["username","string","min"=>4]; ["username","string","max"=>32]; ["username","string","encoding"=>"UTF-8"];
  • unique惟一驗證 
    ["username","unique"] ["username","unique","targetAttribute"=>"province"]
  • url驗證 
    ["website","url"] ["website","url","validSchemes"=>["http","https"]]

String

字符串html

  • 基礎用法
  • 一個字符串中單詞數量 
    StringHelper::countWords("hello world");//2
  • 返回路徑中的文件名部分 
    StringHelper::basename("/path/hello.txt",".txt"); // hello
  • 返回路徑中的目錄名 
    StringHelper::dirname("/home/path/hello.txt");// /home/path
  • 超出內容用...代替(不含HTML) 
    StringHelper::truncate("hello world",7,'...'); //hello w...
  • 超出內容用...代替(識別HTML) 
    StringHelper::truncate("hello world",7,'...',null,true);//hello w...
  • 以單詞爲單位超出部分用..代替(不解析HTML) 
    StringHelper::truncateWords('This is a test sentance', 4, '...') //This is a test ...
  • 以單詞爲單位超出部分用..代替(解析HTML) 
    StringHelper::truncateWords('This is a test for a sentance', 5, '...',true) //This is a test for...
  • 一個字符串是否以另外一個字符串開始 
    StringHelper::startsWith("hello world","he");//true
  • 一個字符串是否以另外一個字符串結尾 
    StringHelper::endsWith("hello world","ald");//false
  • 按照分隔符分隔字符串爲數組 
    StringHelper::explode('It, is, a first, test'));//['It','is','a first','test'] StringHelper::explode("a@b@c","@");['a','b','c'] StringHelper::explode("a, b ,c ");['a','b','c']

Session&Cookie

Session被封裝成一個應用組件,直接經過Yii::$app->session來訪問;Cookie經過Request和Response來操做。前端

  • Session
  • 得到session 
    $session = Yii::$app->session;
  • 檢查session是否開啓 
    Yii::$app->session->isActive
  • 開啓一個session 
    Yii::$app->session->open()
  • 關閉session 
    Yii::$app->session->close();
  • 銷燬session中全部已註冊的數據 
    Yii::$app->session->destroy();
  • 訪問一個session 
    /* 如下三種方法效果等同 */ $language = $session->get('language'); $language = $session['language']; $language = isset($_SESSION['language']) ? $_SESSION['language'] : null;
  • 設置一個session 
    /* 如下三種方法效果等同 */
    $session->set('language', 'en-US'); $session['language'] = 'en-US'; $_SESSION['language'] = 'en-US';
  • 刪除一個session變量 
    /* 下面三種方法效果等同 */ $session->remove('language'); unset($session['language']); unset($_SESSION['language']);
  • 檢查一個session變量是否存在 
    /* 如下三種方法效果一致 */ if ($session->has('language')) ... if (isset($session['language'])) ... if (isset($_SESSION['language'])) ...
  • Cookie
  • 獲取cookie 
    $cookies = Yii::$app->request->cookies;
  • 設置cookie 
    $cookies = Yii::$app->response->cookies;
  • 獲取一個cookie值 
    $language = $cookies->getValue('language', 'en');// 若是獲取language失敗,則返回"en"代替
  • 另外一種獲取cookie值方法 
    if (($cookie = $cookies->get('language')) !== null) { $language = $cookie->value; }
  • 數組方式獲取cookie值 
    if (isset($cookies['language'])) { $language = $cookies['language']->value; } 
  • 檢查一個cookie是否存在 
    if ($cookies->has('language')) ... if (isset($cookies['language'])) ...
  • 新增一個cookie 
    $cookies->add(new \yii\web\Cookie([ 'name' => 'language', 'value' => 'zh-CN', ]));
  • 刪除一個cookie 
    $cookies->remove('language'); unset($cookies['language']);

Request

Request 被配置爲一個應用組件,咱們能夠經過Yii::$app->request訪問它。java

  • URL相關
  • 得到當前請求的絕對url 
    Yii::$app->request->getAbsoluteUrl();
  • 返回一個請求URL的hostInfo部分 
    Yii::$app->request->getHostInfo();
  • 得到URL問號後的參數字符串 
    Yii::$app->request->getQueryString()
  • 返回服務器端口 
    Yii::$app->request->getServerPort();
  • HTTP頭
  • 返回用戶接受的內容類型 
    Yii::$app->request-> getAcceptableContentTypes ();// Header Accept
  • 返回用戶可接受的語言 
    Yii::$app->request-> getAcceptableLanguages(); // Header Accept-Language
  • 返回GET/POST請求 
    Yii::$app->request->get();
    Yii::$app->request->get("id"); Yii::$app->request->POST(); Yii::$app->request->POST("username");
  • 判斷請求類型(返回boolean) 
    Yii::$app->request->isAjax // 判斷是否爲ajax請求 Yii::$app->request->isConsoleRequest // 判斷是否爲控制發起的請求 Yii::$app->request->isDelete // 判斷是否爲DELETE請求 Yii::$app->request->isGet // 判斷是否爲GET請求 Yii::$app->request->isPost // 判斷是否爲POST請求 Yii::$app->request->isPjax // 判斷是否爲isPjax請求
  • 客戶端信息
  • 返回用戶的 IP 
    Yii::$app->request->getUserIP();

Response

和Request同樣,Response被封裝成Yii的一個組件,你能夠經過Yii::$app->response輕鬆的訪問它。nginx

  • Status Code狀態碼
  • 設置一個Status Code 
    Yii::$app->response->statusCode = 200;
  • Yii內置的經過異常形式返回狀態碼 
    yii\web\BadRequestHttpException: status code 400. yii\web\ConflictHttpException: status code 409. yii\web\ForbiddenHttpException: status code 403. yii\web\GoneHttpException: status code 410. yii\web\MethodNotAllowedHttpException: status code 405. yii\web\NotAcceptableHttpException: status code 406. yii\web\NotFoundHttpException: status code 404. yii\web\ServerErrorHttpException: status code 500. yii\web\TooManyRequestsHttpException: status code 429. yii\web\UnauthorizedHttpException: status code 401. yii\web\UnsupportedMediaTypeHttpException: status code 415.
  • 拋出其餘Status Code 
    throw new \yii\web\HttpException(402); // 若是系統沒有,能夠經過HttpException本身寫狀態碼 throw new \yii\web\HttpException(402,"message");
  • HTTP Headers
  • 添加設置刪除Http Headers內容 
    $headers = Yii::$app->response->headers;
    // add a Pragma header. Existing Pragma headers will NOT be overwritten. $headers->add('Pragma', 'no-cache'); // set a Pragma header. Any existing Pragma headers will be discarded. $headers->set('Pragma', 'no-cache'); // remove Pragma header(s) and return the removed Pragma header values in an array $values = $headers->remove('Pragma');
  • Response Body
  • 相應主體 
    Yii::$app->response->content = 'hello world!';

Controller

控制器,可在action內直接用$this調用。web

  • 視圖相關
  • 渲染一個視圖(若是佈局有效則使用佈局) 
    $this->render('index',['model'=>$model])
  • 渲染視圖(不使用佈局) 
    $this->renderPartial('index',['model'=>$model])
  • 渲染視圖(不使用佈局) 
    // 注入全部註冊的JS/CSS腳本和文件,一般使用在響應AJAX網頁請求的狀況下 $this->renderAjax('index',['model'=>$model])
  • 只渲染布局 
    $this->renderContent($content);

ActiveForm

重點!列出最經常使用的ActiveForm方法。ajax

  • 經常使用方法
  • 取消客戶端規則驗證 
    $form = ActiveForm::begin([
    'enableClientValidation'=>false ]);
  • 取消yii.js的引入 
    $form = ActiveForm::begin([
    'enableClientScript'=>false ]);
  • 表單目標地址設置 
    $form = ActiveForm::begin([
    "action"=>$url ])
  • GET & POST 方法設置 
    $form = ActiveForm::begin([
    "method"=>"POST" ]);
  • 設置Form的類及本身定義標籤屬性 
    $form = ActiveForm::begin([
    'options'=>["class"=>"f","data-name"=>"xxx"] ]);
  • 生成文本框 
    $form->field($model, 'date')->textInput(["key"=>"value"]);
  • 生成文本域 
    $form->field($model, 'date')->textarea(["key"=>"value"]);
  • 單選列表 
    $form->field($model,'sex')->radioList($arr,["key"=>"value"]);
  • 密碼框 
    $form->field($model,"password")->passwordInput();
  • 複選框 
    $form->field($model,"city_id")->checkboxList($arr);
  • 文件上傳 
    $form->field($model,"image")->fileInput();
  • 隱藏域 
    $form->field($model,"name")->hiddenInput();

FileHelper

幾個經常使用也好用的文件幫助方法sql

  • 基本方法
  • 遍歷一個文件夾下文件&子文件夾 
    FileHelper::findFiles('/path/to/search/'); FileHelper::findFiles('.', ['only' => ['*.php', '*.txt']]); // 只返回php和txt文件 FileHelper::findFiles('.', ['except' => ['*.php', '*.txt']]); // 排除php和txt文件 
  • 得到指定文件的MIME類型 
    FileHelper::getMimeType('/path/to/img.jpeg');
  • 複製文件夾 
    FileHelper::copyDirectory($src, $dst, $options = [])
  • 刪除一個目錄及內容 
    FileHelper::removeDirectory($dir, $options = [])
  • 生成一個文件夾(同時設置權限) 
    FileHelper::createDirectory($path, $mode = 0775, $recursive = true)

UploadedFile

上傳文件幫助類

  • 基本函數
  • 經過模型的屬性獲取一個文件 
    $file = UploadedFile::getInstance($model,'avatar')
  • 經過模型的屬性來獲取一組文件 
    $files = UploadedFile::getInstances($model,'avatar') //view $form->field($model,'avatar[]')->fileInput()
  • 經過名字上傳一個文件 
    $file = UploadedFile::getInstanceByName('avatar');
  • 經過名字獲取一組上傳的文件 
    $file = UploadedFile::getInstancesByName('avatar'); // view Html::fileInput('avatar[]')
  • 保存一個文件 
    $file->saveAs(Yii::getAlias("@webroot").'/data/test.jpg');
  • 獲取上傳文件原始名(不含擴展名) 
    $file->getBaseName();//test.jpg ===> test
  • 獲取上傳文件的擴展名(已經自動格式化爲小寫) 
    $file->getExtension();// 是png、不是image/png
  • 變量說明
  • 獲取文件的原始名 
    $file->name;//test.jpg
  • 獲取文件媒體類型 
    $file->type;// image/png
  • 獲取文件臨時名 
    $file->tempName;
  • 獲取文件大小 
    $file->size;// 21744

Html

經過Html類的一些靜態方法生成Html標籤。

  • 生成Html標籤方法
  • 生成一個超級連接 
    Html::a('連接的文本', $url);
  • 經過Yii2的路由生成一個連接 
    Html::a('連接文本', Url::to(['/site/index'], true)); Html::a('連接文本', Yii::$app->urlManager->createUrl(['/site/index']));
  • 生成一個圖片連接 
    Html::img("/images/logo.png",['class'=>'img']);
  • 生成一個按鈕 
    Html::button("按鈕文本",['class'=>'button-action']);
  • 發送郵件連接 
    Html::mailto("阿北",'abei@nai8.me',$options);
  • 生成有序列表 
    $list = ['china','usa']; Html::ol($list);
  • 生成無需列表 
    $list = ['china','usa','japan']; Html::ul($list);
  • 生成javascript代碼 
    Html::script("alert('hello world');")
  • 生成style代碼 
    Html::style("color:#F60"); Html::style(".list {background:#FFF;}");
  • 文件引用及編碼
  • 生成一個css引用連接 
    Html::cssFile("http://baidu.com/style.css",[]);
  • 生成一個js文件引用 
    Html::jsFile($url,[]);
  • 把字符 "<" (小於)和 ">" (大於)轉換爲HTML實體 
    Html::encode($html);
  • 將特點的HTML實體轉化爲>和< 
    Html::decode($string);

Alias

  • 定義和使用
  • 定義一個別名 
    Yii::setAlias('@baidu', 'http://www.baidu.com');
  • 得到一個別名 
    Yii::getAlias($name);
  • 得到Yii框架所在的目錄 
    Yii::getAlias('@yii')
  • 正在運行的應用的根目錄 
    Yii::getAlias('@app')
  • Composer第三方庫所在目錄 
    Yii::getAlias("@vendor")
  • bower庫所在位置 
    Yii::getAlias("@bower");
  • npm庫所在位置 
    Yii::getAlias("@npm");
  • 運行時存放文件路徑 
    Yii::getAlias("@runtime");
  • index.php所在目錄 
    Yii::getAlias("@webroot");
  • 當前應用的根URL,主要用於前端。 
    Yii::getAlias("@web");
  • 高級版-通用文件夾 
    Yii::getAlias("@common");
  • 高級版-前臺應用所在位置 
    Yii::getAlias("@frontend");
  • 高級版-後臺應用所在位置 
    Yii::getAlias("@backend");
  • 命令行庫所在位置 
    Yii::getAlias("@console");

Query Builder

主要解決DAO在查詢語句上的繁瑣問題,無需輸入原生SQL語句就能夠完成數據庫檢索。

  • 基本用法
  • 使用Query Builder須要使用的類 
    $query = (new \yii\db\Query()); // yii2使用Query對象來採集SQL的各個部分,而後由Query Builder組成SQL語句後由DAO發給數據庫得到請求。
  • SELECT方法 
    $query->select("id,username");// 字符串形式 $query->select(['id','username']); // 數組形式 $query->select(["userId"=>"id","fName"=>"user.frist_name"]); // 起別名 $query->select(["full_name"=>"CONCAT(id,'-',username)"]); // 支持MYSQL函數
  • FROM方法 
    $query->from("user"); // 字符串形式 $query->from(["u"=>"user"]); // 數據表別名
  • 過濾掉重複記錄 
    $query->select("username")->distinct()->from("user"); // distinct
  • WHERE函數用法 
    /* 傳遞字符串 */ $query->where("id = 1"); $query->where("id = :id")->addParams([":id"=>1]); $query->where("id = :id",[":id"=>1]); /* 傳遞數組 */ $query->where(["username"=>"abei","age"=>[20,19,26]])->from("user");// select * from user where username="abei" AND age in (20,19,26) /* 操做符 */ $query->where([">","id",10]);// id > 10 $query->where(["<","id",10]); // id < 10 $query->where(["<>","id",10]); // id <> 10 $query->where(["in","id",[10,12]]);// id in (10,20) $query->where(["not in","id",[10,12]]);// id not in (10,20) $query->where(["and","id=1","id=2"]); id=1 AND id=2 $query->where(['or', ['type' => [7, 8, 9]], ['id' => [1, 2, 3]]]); // (type IN (7, 8, 9) OR (id IN (1, 2, 3))) $query->where(["between", 'id', 1, 10]);// id between 1 AND 10 $query->where(["not",["id"=>5]]);// not (id=5) $query->where(["not between","id",1,10]);// id not between 1 AND 10 $query->where(["like","username","abei"]); // username like "%abei%" $query->where([['like', 'username', ['abei', 'liuhuan']]]); // username like "%abei%" AND username like "%liuhuan%" $query->where(['like', 'username', '%abei', false]); // username like "%abei" $query->where(["or like", 'username', ['abei', 'liuhuan']]);// username like "%abei%" OR username like "%liuhuan%",只做用於範圍爲數組的形式 $query->where(["not like",xxxxx]);// 與like用法一致 $query->where(["or not like",xxx])// 與not like用法一致 
  • 一個要單獨說明的exists 
    /* EXISTS用於檢查子查詢是否至少會返回一行數據,該子查詢實際上並不返回任何數據,而是返回值True或False */ $query->where(['exists', (new Query())->select('id')->from('user')->where(['id' => 1])]);
  • ORDER BY 方法 
    $query->orderBy("id DESC"); $query->orderBy(["id"=>SORT_DESC]); $query->orderBy(["id"=>SORT_DESC,'create_time'=>SORT_ASC]);
  • GROUP BY && HAVING 
    $query->groupBy(["username"]); $query->groupBy(["id"])->having([">",'id',20]);
  • 獲取生成的SQL語句 
    $query->createCommand()->sql;
  • 得到查詢結果
  • 獲取全部結果 
    $query->all();// 二位數組
  • 獲取一條記錄 
    $query->one();
  • 檢查一個數據庫中是否含有某個表 
    (new \yii\db\Query)->from('user')->exists();
  • 獲取count 
    $query->count();
  • 獲取一個值 
    $query->scalar();
  • 獲取一列值 
    $query->column();// 一位數組
  • 一個例子
  • 獲取一個user表的內容 
    $query = new \yii\db\Query; $query->from("user"); $query->select(["fname"=>"username"]); $query->where([">",'id',10]); $query->all();

Migrate

數據庫遷移工具

  • 基本方法
  • 生成一個遷移文件 
    ./yii migrate/create script_name // script_name爲腳本名字(須要英文格式)
  • 執行全部沒有遷移的腳本 
    ./yii migrate
    ./yii migrate/up
  • 執行置頂的遷移 
    ./yii migrate/up 腳本名 // 不用含有擴展名

Asset Management

Asset資源管理

  • 經常使用參數
  • 類屬性說明 
    $basePath // 資源文件所在的web服務器目錄路徑,通常爲@webroot $baseUrl // js和css文件相對url基地址 $css // asset bundle 所包含的css文件數組 $cssOptions // 對link標籤的屬性控制 $js // asset bundle 所包含的js文件數組 $jsOptions // 對script標籤的屬性控制 $publishOptions // 發佈操做 $sourcePath // 當資源網絡不能夠訪問,則必須指定此目錄。
  • 關鍵參數
  • 去掉瀏覽器緩存 
    'appendTimestamp' => true // 在web.php裏的components - assetManager
  • 發佈資源篩選 
    public $publishOptions = [ 'only' => [ 'fonts/*', 'css/*', 'test.js' ], 'except'=>[ 'img' ], ]; 
  • js文件在頁面的位置 
    public $jsOptions = ['position' => \yii\web\View::POS_HEAD];//js文件發佈到head標籤內 public $jsOptions = ['position' => \yii\web\View::POS_END];//js文件發佈到body標籤底部 public $jsOptions = ['position' => \yii\web\View::POS_BEGIN];//js文件放到body標籤開始處
  • 瀏覽器兼容問題 
    public $cssOptions = ['condition' => 'IE 11'];// 表明兼容ie11
  • 是否使用符號連接 
    'linkAssets' => true // 在web.php裏的components - assetManager
  • 配置yii自身的asset資源 
    // 在web.php裏的components - assetManager,配置自定義的也能夠 'bundles' => [ 'yii/web/YiiAsset'=>[ 'js'=>[], ...... ] ]

Event

有關事件的全部,系統自帶事件統統給你。

  • Application # 應用主體
  • 應用處理請求before以前觸發 
    Application::EVENT_BEFORE_REQUEST
  • 應用處理請求before以後觸發 
    Application::EVENT_AFTER_REQUEST
  • Controller # 控制器
  • 在每一個Action運行以前觸發 
    Controller::EVENT_BEFORE_ACTION
  • 在每一個Action運行以後觸發 
    Controller::EVENT_AFTER_ACTION
  • Model # 模型
  • 在驗證Model屬性以前觸發 
    Model::EVENT_BEFORE_VALIDATE
  • 在驗證Model屬性以後觸發 
    Model::EVENT_AFTER_VALIDATE
  • Module # 模塊
  • 一個模塊的Action運行前觸發 
    Module::EVENT_BEFORE_ACTION
  • 一個模塊的Action運行後觸發 
    Module::EVENT_AFTER_ACTION
  • View # 視圖
  • 執行視圖的beforePage時觸發 
    View::EVENT_BEGIN_PAGE
  • 執行視圖的endPage函數時觸發 
    View::EVENT_END_PAGE
  • 在renderFile渲染一個視圖文件以前觸發 
    View::EVENT_BEFORE_RENDER
  • 在renderFile渲染一個視圖文件以後觸發 
    View::EVENT_AFTER_RENDER
  • 執行視圖的beginBody函數時觸發 
    View::EVENT_BEGIN_BODY
  • 執行視圖的endBody函數時觸發 
    View::EVENT_END_BODY
  • Widget # 掛件
  • Widget初始化時觸發 
    Widget::EVENT_INIT
  • Widget執行前觸發 
    Widget::EVENT_BEFORE_RUN
  • Widget執行以後觸發 
    Widget::EVENT_AFTER_RUN
  • ActiveQuery
  • 由ActiveQuery的init函數觸發 
    ActiveQuery::EVENT_INIT
  • BaseActiveRecord & ActiveRecord # 這也許是內置事件中最重要的一批了。
  • AR對象被初始化init時觸發 
    BaseActiveRecord::EVENT_INIT
  • AR執行查詢結束時觸發 
    BaseActiveRecord::EVENT_AFTER_FIND
  • 插入結束時觸發 
    BaseActiveRecord::EVENT_BEFORE_INSERT
  • 插入以後觸發 
    BaseActiveRecord::EVENT_AFTER_INSERT
  • 更新記錄以前觸發 
    BaseActiveRecord::EVENT_BEFORE_UPDATE
  • 更新記錄以後觸發 
    BaseActiveRecord::EVENT_AFTER_UPDATE
  • 刪除記錄以前觸發 
    BaseActiveRecord::EVENT_BEFORE_DELETE
  • 刪除記錄以後觸發 
    BaseActiveRecord::EVENT_AFTER_DELETE
  • 在數據refresh成功以後觸發 
    BaseActiveRecord::EVENT_AFTER_REFRESH
  • Connection # 數據庫鏈接
  • 數據庫鏈接被打開後觸發 
    Connection::EVENT_AFTER_OPEN
  • 事務被啓動時觸發 
    Connection::EVENT_BEGIN_TRANSACTION
  • 事務被提交後觸發 
    Connection::EVENT_COMMIT_TRANSACTION
  • 事務回滾後觸發 
    Connection::EVENT_ROLLBACK_TRANSACTION
  • Response # Http響應
  • Response響應發送以前觸發 
    Response::EVENT_BEFORE_SEND
  • Response響應發送以後觸發 
    Response::EVENT_AFTER_SEND
  • Response響應內容準備好以後觸發 
    Response::EVENT_AFTER_PREPARE
  • User # 會員登錄受權
  • 登錄以前觸發 
    User::EVENT_BEFORE_LOGIN
  • 登錄以後觸發 
    User::EVENT_AFTER_LOGIN
  • 註銷以前觸發 
    User::EVENT_BEFORE_LOGOUT
  • 註銷以後觸發 
    User::EVENT_AFTER_LOGOUT

Route&UrlManager

路由管理

  • 配置項
  • URL美化配置 
    // conf/web.php 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'suffix'=>'.html',// 統一後綴名,若不須要則無需配置 'enableStrictParsing'=>false,//默認爲false,是否採用嚴格解析 'rules' => [ ], ]
  • Apache開啓url重寫方法 
    // Apache須要支持url重寫其AllowOverride爲all AllowOverride:all //web目錄下增長.htaccess,隱藏index.php文件 內容以下 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php
  • Nginx支持url重寫 
    location / { if (!-e $request_filename){ rewrite ^/(.*) /index.php last; } }
  • Apache開啓url重寫方法2 
    RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)\?*$ index.php/$1 [L,QSA]

RESTful

  • APIs # 內置的API
  • 分頁得到全部的會員 
    GET /users
    GET /users?page=2 GET /users?fields=id,username,created_at GET /users?sort=id,-username
  • HTTP狀態碼 
    200: OK。一切正常。 201: 響應 POST 請求時成功建立一個資源。Location header 包含的URL指向新建立的資源。 204: 該請求被成功處理,響應不包含正文內容 (相似 DELETE 請求)。 304: 資源沒有被修改。可使用緩存的版本。 400: 錯誤的請求。可能經過用戶方面的多種緣由引發的,例如在請求體內有無效的JSON 數據,無效的操做參數,等等。 401: 驗證失敗。 403: 已經通過身份驗證的用戶不容許訪問指定的 API 末端。 404: 所請求的資源不存在。 405: 不被容許的方法。 請檢查 Allow header 容許的HTTP方法。 415: 不支持的媒體類型。 所請求的內容類型或版本號是無效的。 422: 數據驗證失敗 (例如,響應一個 POST 請求)。 請檢查響應體內詳細的錯誤消息。 429: 請求過多。 因爲限速請求被拒絕。 500: 內部服務器錯誤。 這多是因爲內部程序錯誤引發的。
相關文章
相關標籤/搜索