Yii2 進階篇

過濾器

什么是過濾器

過濾器是控制器動作執(zhí)行之前或之后需要執(zhí)行的代碼捉貌。該代碼以對象的形式執(zhí)行昔穴,則應該使用類的方式定義并申明。
過濾器本質上是一種特殊的行為剧蚣。

為什么使用過濾器

通常情況下支竹,過濾器將代碼綁定到所有的操作上,也就是說鸠按,每一個操作的執(zhí)行唾戚,都需要先或后執(zhí)行過濾器,所以待诅,可以用來執(zhí)行權限檢測叹坦、緩存處理等事情

在哪里使用過濾器

在控制器中,定義:
public function behaviors(){
}

過濾器詳解

==behaviors()方法返回一個數組卑雁,類似于配置文件==
數組內的每一個元素也應該是一個數組募书,表示一個過濾器
如:

Public function behaviors(){
Return [
[
‘class’ => ‘實現類’,
]
];
}
表示定義了一個過濾器

過濾器的位置

Yii2為開發(fā)者定義了很多的過濾器,可以直接拿過來使用测蹲。

過濾器位置.png

定義過濾器

在Yii2中莹捡,自定義過濾器,需要繼承 yii\base\ActionFilter 類并覆蓋 yii\base\ActionFilter::beforeAction() 和/或 yii\base\ActionFilter::afterAction() 方法來創(chuàng)建動作的過濾器
定義在beforeAction()中的代碼會在操作執(zhí)行之前執(zhí)行
定義在afterAction()中的代碼會在操作執(zhí)行之后執(zhí)行

如:創(chuàng)建一個過濾器扣甲,記錄操作執(zhí)行的時間
首先應該創(chuàng)建一個過濾器篮赢,比如在frontend 應用中創(chuàng)建一個 filters目錄,專門用來存儲過濾器琉挖,然后創(chuàng)建TimeFilter.php文件過濾器通常使用Filter.php作為文件后綴启泣,而文件中應該有一個和文件名一樣的類

過濾器位置1.png
過濾器.png

然后覆蓋基礎過濾器的 beforeAction 和 afterAction

過濾器應用.png

在beforAction中,如果返回true表示放行示辈,操作繼續(xù)執(zhí)行寥茫,如果返回false,表示停止矾麻,操作不再執(zhí)行纱耻。

加載過濾器

過濾器加載.png

需要注意的問題:
==定義過濾器內的beforeAction 和 afterAction ,必須返回父類的方法。
Return parent::beforeAction($action)==

錯誤處理

  1. 凡是非致命錯誤都以異常的形式拋出险耀,是可以捕獲的
  2. 錯誤處理器是以組件的形式配置在main中的
  3. 錯誤響應的格式是可以選擇的弄喘,有ajax或者html或者純文本
  4. 響應錯誤的方法是可以自己定義的
    錯誤組件的實質類是yii\web\ErrorHandle其他的配置參數可以去該類中查看public屬性

Session的使用

Session使用.png

Cookie的使用

//獲取cookie的對象
$getCookieObj = Yii::$app->request->cookies;

//設置cookie的對象
$setCookieObj = Yii::$app->response->cookies;

/**
 * 添加cookie
 * 注意:
 * 使用add來添加add的參數必須是yii\web\Cookie對象
 */
$setCookieObj->add(new Cookie([
    'name' => 'tel',
    'value' => '15730436354',
    'expire' => time()+20
]));

/**
 * 獲取值時有三種方法
 */
//獲取的是cookie的值
var_dump($getCookieObj->getValue('tel', '00000'));
//獲取的是對象
var_dump($getCookieObj->get('tel'));
//獲取的是對象
var_dump($getCookieObj['tel']);

文件上傳

在Yii里上傳文件通常使用yii\web\UploadedFile類, 它把每個上傳的文件封裝成 UploadedFile 對象甩牺。 結合yii\widgets\ActiveForm和models蘑志,你可以輕松實現安全的上傳文件機制

創(chuàng)建模型

和普通的文本輸入框一樣,創(chuàng)建一個models里的屬性,表示一個字段卖漫,然后完善驗證規(guī)則即可

創(chuàng)建模型.png

創(chuàng)建控制器费尽,實例化表單模型和渲染視圖

創(chuàng)建控制器.png

視圖中使用ActiveForm創(chuàng)建表單元素

創(chuàng)建元素表單.png

在控制器中接收表單數據并綁定數據到表單模型

表單模型.png

注意:要調用上傳功能,需要打開 php_fileinfo 擴展
uploads目錄應該在入口文件同級目錄

多文件上傳

Yii2支持多文件上傳羊始,只需要在上面的例子中加入一些小的修改即可

修改表單模型

在驗證中加入 maxFiles 配置表示最多可以上傳多少個文件

修改表單模型的upload 方法

如果是多文件上傳旱幼,這里的$this->imageFile 就會是一個數組,所以可以使用foreach來進行文件保存

視圖文件修改

需要傳入多個文件突委,就需要在表單name屬性加上[] 再加上multiple屬性


控制器修改

控制器接收多個文件柏卤,應該使用UploadedFile 里的getInstances方法來綁定屬性


驗證碼

Yii2中的驗證碼是通過擴展的操作來實現的,叫做
yii\captcha\CaptchaAction
只需要將它綁定到actions中就可以直接訪問匀油,無需任何更改:


可配置的驗證碼屬性

由于驗證碼是一個公共操作缘缚,我們可以很輕松的找到它的實現類。實現類中的各種屬性都可以被認為是可配置的屬性
如:

public $width=120;

還可以設置:
height: 高度
backColor: 背景色
foreColor 文字顏色
minLength 最小長度(文字字數)
maxLength 最大長度
fontFile 字體文件
.....

在視圖中使用驗證碼


使用widget()方法來調用驗證碼模塊敌蚜,并且指定顯示的DOM結構
{image} 表示顯示驗證碼圖片
{input} 顯示驗證碼輸入框

驗證驗證碼

驗證碼在填寫完成之后桥滨,還需要使用驗證機制來完成驗證碼的驗證,在Yii2中弛车,不需要自己去寫驗證齐媒,直接在表單模型的 rules 中調用 captcha 驗證就可以了

['verifyCode','captcha'],

數據分頁

Yii2也提供了類似于TP的數據分頁類:
\yii\data\Pagination
要使用它,需要先進行實例化:
實例化的時候纷跛,需要傳入數據的總條數和每頁顯示的條數

控制器中操作

public function actionList()
    {
        //獲取頁碼喻括,參數需和Pagination中配置的參數一致
        $page=Yii::$app->request->get("page");
        $page=($page-1)>0?($page-1):0;
        $pageSize=5;
        //設置分頁配置
        $config=[
            'totalCount' => User::find()->count(),
            'defaultPageSize' => $pageSize,
            'pageParam' => 'page',
        ];
        //實例化分頁器,將配置參數傳入到Pagination中
        $paginationObj = new Pagination($config);
        $rows =User::find()->asArray()->offset($page*$pageSize)->limit($pageSize)->all();
        return $this->render('list',[
            'rows'=>$rows,
            'pagebar' => $paginationObj
        ]);
    }

視圖中操作

在視圖中要顯示分頁,要使用到LinkPager 小部件
使用方法:

<?=\yii\widgets\LinkPager::widget([
        'pagination' => $pagebar
]) ?>

需要傳入一個 pagination 對象贫奠,也就是 $pages;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末唬血,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子唤崭,更是在濱河造成了極大的恐慌拷恨,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,423評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浩姥,死亡現場離奇詭異挑随,居然都是意外死亡,警方通過查閱死者的電腦和手機勒叠,發(fā)現死者居然都...
    沈念sama閱讀 90,147評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來膏孟,“玉大人眯分,你說我怎么就攤上這事∑馍#” “怎么了弊决?”我有些...
    開封第一講書人閱讀 157,019評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我飘诗,道長与倡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,443評論 1 283
  • 正文 為了忘掉前任昆稿,我火速辦了婚禮纺座,結果婚禮上,老公的妹妹穿的比我還像新娘溉潭。我一直安慰自己净响,他們只是感情好,可當我...
    茶點故事閱讀 65,535評論 6 385
  • 文/花漫 我一把揭開白布喳瓣。 她就那樣靜靜地躺著馋贤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪畏陕。 梳的紋絲不亂的頭發(fā)上配乓,一...
    開封第一講書人閱讀 49,798評論 1 290
  • 那天,我揣著相機與錄音惠毁,去河邊找鬼扰付。 笑死,一個胖子當著我的面吹牛仁讨,可吹牛的內容都是我干的羽莺。 我是一名探鬼主播,決...
    沈念sama閱讀 38,941評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼洞豁,長吁一口氣:“原來是場噩夢啊……” “哼盐固!你這毒婦竟也來了?” 一聲冷哼從身側響起丈挟,我...
    開封第一講書人閱讀 37,704評論 0 266
  • 序言:老撾萬榮一對情侶失蹤刁卜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后曙咽,有當地人在樹林里發(fā)現了一具尸體蛔趴,經...
    沈念sama閱讀 44,152評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,494評論 2 327
  • 正文 我和宋清朗相戀三年例朱,在試婚紗的時候發(fā)現自己被綠了孝情。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,629評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡洒嗤,死狀恐怖箫荡,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情渔隶,我是刑警寧澤羔挡,帶...
    沈念sama閱讀 34,295評論 4 329
  • 正文 年R本政府宣布洁奈,位于F島的核電站,受9級特大地震影響绞灼,放射性物質發(fā)生泄漏利术。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,901評論 3 313
  • 文/蒙蒙 一低矮、第九天 我趴在偏房一處隱蔽的房頂上張望印叁。 院中可真熱鬧,春花似錦商佛、人聲如沸喉钢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肠虽。三九已至,卻和暖如春玛追,著一層夾襖步出監(jiān)牢的瞬間税课,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,978評論 1 266
  • 我被黑心中介騙來泰國打工痊剖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留韩玩,地道東北人。 一個月前我還...
    沈念sama閱讀 46,333評論 2 360
  • 正文 我出身青樓陆馁,卻偏偏與公主長得像找颓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子叮贩,可洞房花燭夜當晚...
    茶點故事閱讀 43,499評論 2 348

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理击狮,服務發(fā)現,斷路器益老,智...
    卡卡羅2017閱讀 134,631評論 18 139
  • Composer 基本用法 // 安裝yii程序 composercreate-project--prefer-d...
    熱過豆腐干閱讀 1,242評論 0 4
  • Sites 網站 yiifeed:Yii 最新動態(tài)都在這里 yiigist:Yii 專用的 Packages my...
    guanguans閱讀 2,647評論 0 11
  • 安裝YII2 在確保composer安裝完成后通過composer安裝YII2 第一條命令為全局安裝一個js的包管...
    某不科學的XX閱讀 2,103評論 0 2
  • 心心卻無可依彪蓬,念念卻無可往。 一個秋日的午后捺萌,想找一個清靜之地爬爬山档冬,曬曬太陽。經當地居民推薦桃纯,來到這個徽州著名的...
    姀月閱讀 975評論 1 2