Yii框架与项目
第一部分:需求
第二部分:初始Yii2
2.1結構
2.2生命周期
上半部分創建了一個應用主體,應用主體明確了由哪個控制器去接管后面的工作。
第1步,發出url后,apache會執行index.php這個文件,在Yii框架中,這個文件叫入口文件。
這個文件在web目錄下,執行此文件件主要做2件事:
1. 讀取配置文件web.php
2. 配置文件的數據來實例化這個應用主體。
應用主體會控制接下來的整個生命周期,直到響應出結果。應用實體具體是什么,稍后詳
解。
第2步,應?實體接下來要進?路由解析,路由解析就是是根據url中的參數r, 來決定由哪些
代碼來完成用戶的請求。這一步先取得r的值。
第三步,在請求組件的幫助下,解析出路由。這個例?解析的結果就是要創建?個叫
SiteController的控制器的實例,并且執行里面的actionIndex?法
?
2.3入口文件
? 定義全局常量;
? 注冊 Composer 自動加載器;
? 包含 Yii 類文件;
? 加載應用配置;
? 創建這個應用實例并配置;
? 調?用yii\base\Application::run() 來處理請求。
2.4應用主體
應用主體是通過index.php進行生成的
<html lang="<?= Yii::$app->language ?>”>
Yii::$app->user->identity->username
Yii::$app->homeUrl
Yii::$app->charset
basePath :指定該應用的根目錄
aliases :用一個數組定義多個 別名。數組的key為別名名稱,值為對應的路徑。
components :這是最重要的屬性,它允許你注冊多個在其他地方使用的的應用組件.
defaultRoute :該屬性指定缺省的路由規則,’defaultRoute’=>'site/about'
第三部分:控制器
3.1初識
3.2小知識
?控制器從yii\web\Controller類繼承來
$this是控制器對象本身,調的render(中文的意思是著色的意思)法(相當于TP中的assign)
第四部分:視圖
4.1初識
4.2布局
第五部分:模型
5.1初識
5.2流程
5.3函數解釋
refresh就是讓頁面進行刷新一次
5.4表單
- 中間是通過調用ActiveForm::field() 方法來創建這個ActiveField 實例,這個實例會創建表單的input標簽和JavaScript 驗證。
- ActiveField有對應的模型和屬性,input 輸入框的 name 屬性會自動地根據屬性名來創建;同時,還會用屬性的驗證規則(由js進行驗證)來驗證用戶輸入的數據。
- ActiveField如何進行使用,就要參考手冊<?= $form->field($model,'email')?>
5.5塊賦值
表單生成的input中的name,實際是以對象名來命名的這個數組,數組的鍵和模型的屬性對應,提交的數據就是鍵對應的值。 在模型那邊執行load方法,其實就是對每個屬性執行這樣語句賦值: $model->name = isset($data['name']) ? $data['name'] : null;5.6助手類HTML
前面按鈕的例子,就是用純html寫就這樣。也可以用html 幫助類的submitButton方法來寫。前面得div里面的
第六部分:博客原型
6.1別名
6.2配置文件
箭頭后面的是權利大的,不會被覆蓋掉,前面得會被覆蓋掉
6.3需求分析
?
6.4表結構
分析表結構:
post表:對應adminuser外鍵與poststatus外鍵
comment表:對應commitstatus外鍵、user_id外鍵與post_id外鍵
tag表:單獨的tag標簽用于記錄標簽云
migration表:系統的yii自己產生的表
6.5Gii
6.5.1概念
Gii 是一個基于Web的代碼生成器,可以用來生成模型,控制器,表單,增刪查改等等這些
類或功能的代碼。Gii也叫腳手架程序,是一種輔助工具。
6.5.2配置
首先,要在配置main-local.php,配置Gii模塊開啟,我們只要在瀏覽器上輸入這個網址,注意參數 r=gii,這樣就可以使用Gii了。
6.5.3作用
Gil是可以個可以幫你寫代碼的神奇工具。可以用來生成模型,增刪查改,控制器,表單,
模塊,擴展這些代碼。
6.5.4模型類
1. 首先要我們填寫數據庫表名,我們先創建文章的模型類,文章的表名是post, 2. 然后是模型類的類名,我們命名為post。 3. 然后是命名空間,這個是用common/models,因為這個類是前后臺共用的。 4. 其他的都用默認值就可以了。 5. 點preview,預覽這個按鈕后,告訴你,將會在common/models這個目錄下生成Post.php的模型?件。 6. 可以點開來粗略看看?件的內容,這些就模型類的代碼。 7. 沒有問題就可以點“生成“這個按鈕,告訴你已經成功生成了Post模型?件。模型文件主要包括以下內容:
1.屬性:有屬性,屬性標簽,數據規則,塊賦值這些東西。在ActiveRecord這塊也不會少,這些就是所謂的業務數據---屬性。
2.業務規則:模型類的業務規則,業務數據有些是必填項,有些必須為字符串,有些字段必須為整數。title這些要求是字符串,并且不能超過128個字符。
3.屬性標簽:
4.業務邏輯:其它幾個方法就是業務邏輯。里面用到的hasmany hasone這些?法,都是ActiveRecord這
個類提供的方法
6.5.5增刪改查
1.進行增刪查改的代碼生成頁面,先要輸入模型類的類名,注意要把命名空間寫全。先從文章Post開始。 2.還要生成一個PostSearch這個類,這個類是用來進文章搜索的,我們在后臺完善文章管理那一章會詳細分析這個類。 3.接下來是控制器類,注意增刪查改功能是后臺的功能,我們把它放到backend目錄下的controllers目錄里面,類 名設為PostController。 4.再下來,這里填寫視圖模板文件存放的目錄。@app指的是當前應用的根目錄,注意這斜杠的方向,和命名空間是有區別的。 5.點預覽,可以看到,將要生成一堆文件。?
第七部分:后臺功能完善
7.1文章查看一(連接數據庫)
7.1.1代碼展示
1.文章查看控制器動作
public function actionView($id) {return $this->render('view', ['model' => $this->findModel($id),]); }7.2文章查看模型動作
protected function findModel($id) {if (($model = post::findOne($id)) !== null) {return $model;} else {throw new NotFoundHttpException('The requested page does not exist.');} }7.1.2使用數據庫
1.定義:
2.使用yii\db\Connection鏈接
?這段代碼表示會創建一個 yii\db\Connection 對象,并用這個對象來訪問數據庫。
3.使用yii\db\Command訪問與操作
他的缺點也很明顯:
1. 不同數據庫系統的SQL語句會有些差別,因此無法做到代碼適用于多種數據庫系統。
2. 用數組保存結果,而沒有用到面向對象的方式來管理數據,這樣就失去了許多面向對象
開發的好處。
3. 不安全,如果不小心,會留下SQL注入這種不安全的因素,比如你不是通過綁定,而是直
Yii通過數據庫訪問對象(Database Access Objects,簡稱DAO)來使用數據庫。DAO是建立在 PDO 之上的,一套面向對象的方式來訪問數據庫的API。
我們之前連接數據庫,就是在main-local配置文件中,這樣寫就可以連上數據庫。
?這個對象的寫法: Yii::$app->db,等下查詢數據時就會用到這個對象。
?
?
接把$_GET[‘id’]寫到sql語句中,那么就危險了。
7.2文章查看二ActiveRecord
7.2.1什么是ActiveRecord
Active Record (活動記錄,以下簡稱AR)提供了1個面向對象的接口, 用以訪問數據庫中的數據。
? 1個 AR 類關聯1張數據表,每個 AR 對象對應表中的一行。
? AR對象的屬性,對應為數據標的列
? 可以直接以面向對象的方式來操縱數據表中的數據,這樣就不需要寫SQL語句就能實現數
據庫的訪問。
7.2.2聲明ActiveRecord 類
來看看post類,要聲明1個 AR 類,最少,你需要從 yii\db\ActiveRecord 基類來繼承, 并
且要實現 tableName 的方法,明確這個AR類的屬性是關聯哪張數據表。這樣就已經聲明了1
個最基本的AR類。當然,1個完整的AR類還應該有屬性標簽,數據規則,業務代碼這些內
容。
我們來把post表簡化一下,比如,只有4個字段,id是主關鍵字。 我們只需要實現Post類中
的tablename方法,就已經建立好對應post這個數據庫表的AR類,類名也是Post。
7.2.3如何查詢數據
兩種方法: AR 提供了兩個靜態方法來構建 DB 查詢,并且把查詢到的數據填充到 AR 對象實例中,最 后返回這個對象。 這兩個方法,1個是find,1個是findBySql: yii\db\ActiveRecord::find() yii\db\ActiveRecord::findBySql()7.2.4find方法
? ? ? ??第1點,ActiveRecord方法有兩個快捷方法:findOne 和 findAll,可以來替換find方法。
? ? ? ??第2點,可以看出,例子中的兩個查詢條件是比較簡單的,我們實際開發中很多時候會遇到
更為復雜的查詢條件。
? ? ? ??find方法是創建1個ActiveQueryInterface實例對象來實現查詢的。這個創建好的ActiveQueryInterface對象,需要進1步調用ActiveQueryInterface中已經定義好的方法來設置查詢條件,最后才通過調用one或all方法來得到AR對象。 ??
例子 $posts = Post::find()->where(['AND',['status' => 2],['author_id' => 1],['Like','title','yii2']]) ->orderBy(‘id')->all();7.2.5findbysql() 查詢數據
? ? ? ??command對象來查詢非常類似,都是要寫SQL,但是這個返回的是對象,而command返回的是數組。?
7.2.6ActiveRecord? ? ??
7.2.7ActiveRecord如何操作數據
? ? ?訪問列數據
? ? ??find方法得到model對象后,使用model->id就可以讀出id這個列的值,這個的id和title就是數據表的列名。
注意,如果返回的是對象數組時,我們應該使用foreach來遍歷每個對象。
7.2.8操作數據
? ? ??AR 提供下面這些方法來實現插入、更新和刪除等功能:
? ? ? yii\db\ActiveRecord::save() ? ? ? ?yii\db\ActiveRecord::insert()
? ? ? yii\db\ActiveRecord::update() ? ?yii\db\ActiveRecord::delete()
? ? ??save方法可以用來替代insert和update方法。
? ? ??ActiveRecord可以說是Yii框架的靈魂,它把數據庫和模型建立了聯系,使用面向對象的方式來操縱數據表中的數據,一個 AR 類關聯一張數據表,每個 AR 對象對應表中的一行。關于ActiveRecord的知識還不止這些,我們后面還會不斷補充。
7.3文章查看三拼接數據表
7.3.1數據小部件
? ? ? ??顧名思義,數據小部件用來顯示數據的小模塊。 常用的小部件有DetailView,ListView。
? ? ? ? DetailView:主要用來顯示1條記錄數據的詳細情況。
? ? ? ? ListView 和 GridView:他們可以用來顯示1個擁有分頁、 排序和過濾功能的1組數據。
?
7.3.2DetailView數據小部件
DetailView小部件通常用來顯示的是一條記錄的詳情。
?
?
7.3.3關聯表查詢
看看代碼,在Post文章類中,只要實現一個叫getStatus0的方法,就可以建立起兩張表的關聯關系了,getStatus0方法的返回值是執行文章對象本身的hasone方法的結果,hasone方法參數中第1項Poststatus::className()就是文章狀態表的表名,第2項是關聯的條件,這是poststatus表里面id字段等于Post表中的status字段。
這段代碼就是建立文章章類和文章狀態類的關聯關系。
代碼思路: 這樣的話,我們要拿到“已發布”這個?字,就可以了 $thePost->status0->name 這種形式來拿到了。 $model->status0相當于1個 poststatus文章狀態的對象, 然后取它的name屬性值,就可以了。7.3.4多對一 一對多
這里的hasOne方法,因為文章對于文章狀態來說,是多對一 一對一的關系。
這里的hasMany方法,因為文章對于文章評論來說,是一對多的關系。
7.3.5圖表展示
一個拼接的完整過程
7.4文章查看四
7.4.1日期格式的修改
[ 'attribute'=>'create_time', 'value'=>date("Y-m-d H:i:s",$model->create_time), ]? ? ?detailview的template屬性可以調節小部件中一行的模板,我們可以設置th標簽的屬性來改變這一列的寬度。
7.5修改頁面一:查詢數據
7.5.1下拉菜單(AR的find方法,command對象方法, QueryBuilder)
ActiveForm讓表單和模型結合起來,充分利用了模型的數據規則,讓表單的驗證代碼幾乎不
用寫。同時,activefield簡化了表單input元素的編寫,極大的減輕了表單開發工作量,
同時讓表單代碼的可讀性和可維護性提高。
第二種方法:
使用command對象來取數據。 $sts = Yii::$app->db->createCommand('SELECT id,name FROM poststatus')- >queryAll(); command對象執行查詢后返回的是多維數組,同樣可以用arrayhelper的map靜態方法來轉換,這就得到鍵值對數組作參數。 刷新看到,也是我們需要的下拉菜單。第三種方法:
querybuilder查詢構建器是建在 DAO 基礎上,這樣創建的SQL語句,比原生SQL語句更易讀、更安全。
7.5.2?數組助手類 Array Helper
里面含有的方法:
獲取值getValue ? ? ? ?獲取值
獲取列getColumn ? ?從多維數組或對象數組中獲取某列的值
????????建立映射表map ? ? ? ?map方法可以從一個多維數組或1個對象數組中取出數據,建1個新映射表
command對象執行查詢后返回的是多維數組,同樣可以用arrayhelper的map靜態方法來轉
換,這里就得到鍵值對數組作參數。
7.5.3QueryBuilder
總得思路: 第1步是構建查詢,首先創建1個 yii\db\Query 對象來代表1條 SELECT SQL 語句, 然后通過調用一套可以串起來的方法,比如select方法,from方法,where方法等這些方法,構建出可以滿足指定要求的查詢條件。 第2步是執行查詢,執行Query 構建出來的查詢條件,可以執行的查詢方法有很多,比如 有all方法取出所有數據,one方法取第1條數據,column方法取第1列數據等等7.5.4相關函數
select方法是用來指定要取哪些字段,代表要取id和email2個字段的值,還可用addSelect方法來附加字段
from來指定要從哪張表拿數據
where方法用來設定查詢條件,寫法也靈活,可以字符串形式,鍵值對數組形式,也可以是操作符形式
orderby,可以用鍵值對數組的鍵來表示需要排序的字段,其值來設定升序或降序
limit和offset的寫法,比如:從第20條開始取數,取10條記錄
indexBy:indexBy(id)來讓id這一列的值作為索引值,也就是數組的鍵。
groupBy having:可以用addgroup添加分組字段,having用來設置分組過濾的條件,可以用andHaving() orHaving() 來添加條件。
join用來做表的連接查詢,比如這條sql語句,可以寫成這樣。在參數設定了連接類型,還有
連接表,連接條件,如果需要的話,這里還有連接條件的參數綁定,這是為了預防sql注入的。
union用來聯合2個不同的查詢。
all()方法執行后,可以得到多個多維數組,第1維是1個普通的索引數組,每1
項對應從數據表中查詢出來的一行。這些行就是第2維,是一個由字段名和值構成的鍵值對
數組。
one()把all換成one() 方法看看,這里返回的是第1條記錄,這里就不是1個多維數組,只是1個鍵值對數組。
column(),返回的是1個索引數組,由數據庫中的第1列數據組成。scalar(),返回第1行第1列的數據,這是個字符串。
count(),返回記錄條數,是1個整數。
7.5.5三種方法對比
AR的find方法,本質上也是用查詢構建器來構建查詢,返回的是對象.
Command對象:返回數組
Query對象:可程序化構建,DBMS無關,易讀,更安全,他的返回值是多個多維數組。
7.6修改頁面二
7.6.1新建修改時間方法一
方法一:當文章改提交后,就會看到最后修改時間確實就是當前時間,沒問題。新
增文章也一樣,實例化出文章對象model后,我們只要先把對象的createtime和updatetime
兩個屬性,都賦值為當前時間就可以了。
7.6.2新建修改時間方法二
AR的生命周期
?
對新增時間和修改時間的設置,最合適的地方法就是beforeSave()這個方法,在提交的數據保存之前,把這個2個值設好,就實現了時間的自動設置。
來代碼中看看如何重寫beforeSave方法: public function beforeSave($insert) $instert 是來區別對象的記錄寫?數據庫時,是新增還是修改。 if (parent::beforeSave($insert)) { 一定要先調用父類的beforeSave方法,保證這個方法原有的代碼先被執行,然后再執行 我們寫的代碼。 $this->create_time=time();$this->update_time=time(); 新增的時候,2個時間都賦值,這2句只會在新增時被執行一次。 else $this->update_time=time(); 以后發生修改,只會改變最后修改時間。 這樣就完成了修改。7.6.3AR的其他方法
7.7頁面修改三
7.7.1tags的修改的需求
需求:
當這篇文章新增到數據庫以后,這張表的數據就會發生變化,先看看表中有沒有yii2這個標簽,
有的話就加1,再看看第2個標簽“小部件”,也有,就加1. 再看看第三個widget,發現表中沒
有這個標簽,那么就新增一條記錄。
7.7.2tags修改思路
7.7.3updateFrequency的調用
7.8管理頁面完善一
7.8.1管理頁面需求
PostSearch搜索類DataProvider數據提供者GridView數據小部件
7.8.2GridView數據小部件
???要創建一個GridView,也是通過一個鍵值對數組來進行配置的,鍵值對包括:
????? dataProvider 鍵指定提供數據的數據提供者。
????? filterModel 鍵指定一個能夠提供搜索過濾功能的搜索模型類。
????? columns 鍵來指定需要展示的列,以及展示的格式
7.8.3GridView之columns
????? 序號列類: 用來產生行號的,從 1 起始并自動增加;
????? 數據列: 用于顯示數據
????? 動作列: 顯示動作按鈕,如查看、更新、刪除操作,我們講到評論管理的時候,會增加一個審核的按鈕,到時會詳細介紹動作列這個類。
????? 復選框列: 用來顯示一個復選框列
7.8.3.1columns之數據列
這里列出了幾個經常改動的鍵, attribute 指定需要展示的屬性 label 標簽名 value 值 format 格式 filter 自定義過濾條件的輸入框 contentOptions 設定數據列的HTML屬性7.8.4ActiveDataProvider
? 可以獲取數據,并提供給其他組件或頁面使用
? 可將獲取到的數據進行分頁和排序
? 經常用來給數據小物件提供數據,方便用戶互動地進行數據的分頁與排序
? 實現了 yii\data\DataProviderInterface 接口類
DataProvider根據獲取數據的方式不同,有這3種類型: ActiveDataProvider是通過查詢構建器的方式從數據庫取數據。 SqlDataProvider通過sql語句從數據庫拿數據 ArrayDataProvider由數組提供數據。7.8.4.1接口類方法-排序與分頁
getPagination,是讀出分頁對象信息的,可以看到,我們設置的pagesize=6. getSort,這些是顯示哪些屬性可以用來排序,以及支持用哪些順序來排。 defaultorder是顯示默認的排序字段和排序方式 getCount 是當前頁的數據條數。 getTotalCount 則是所有記錄的條數。 分別是6和11,都沒問題。 我們主要通過配置pagination和sort來設定數據提供者的分頁和排序的設定。 還要補充一個車常用方法getmodels,這個方法就是把數據提供者中的數據取出來。7.9管理頁面的完善二-PostSearch
此處的主要作用就是用來根據輸入的作者的姓名進行搜索與排序
7.9.1gridview
gridview會根據PostSearch和Post的屬性名,把表單的輸入項和數據的展示項一一對
應起來。比如:id這一列數據,對應的表單就是PostSearch類中的id屬性。
如果我們把搜索類換成comment,gridview就會看看comment有哪些屬性,
然后和下面的數據展示列對應,發現除了status,其他都對不上,所以只能能把status展示出
來。?
7.9.2根據屬性查詢
既然要用作者姓名來查詢,用authorid只能按id查,那我們能
不能給PostSearch類額外增加一個屬性authorName,然后用這個屬性來實現按字符串查詢
姓名。
之后還要在postsearch里面進行添加authname的屬性與驗證規則rules
7.9.3PostSearch類的Rules
現在給我們增加的屬性authorName,加上1個驗證規則,可以認為提交的數據是安全的。
7.9.4重點搜索
第1句,構建了1個查詢。
第2句,數據提供者dataprovider把數據、分頁、排序都封裝了好。
第3句,作為結果返回dataprovider。
load進行塊賦值(是使用的輸入的數據)
7.9.5屬性name進行搜索
1.賦值:使用load進行輸入name屬性
2.使用join命令連接關聯表adminuse與post文章表格進行連接
3.進行like比對使用andfilterwhere命令
7.9.6對于dataprovider進行排序
添加排序的小插件即可
7.9.7總結
8.后臺完善評論管理
8.1評論管理頁面的完善
需求 3. 評論內容的長短不一,看起來不方便,考慮截取評論前面一小段來展示。 9. 把待審核的評論排在排前面,并用不同底色區別。 10.添加一個審核按鈕,可以對評論進行審核。 11.顯示待審核評論條數的氣泡。8.2匿名函數$Value
函數簡介
關于這段,用匿名函數來設置value的寫法,我們可以查看參考手冊: -value可以用匿名函數或字符串來設置, -匿名函數用這樣的格式,我們用到的model,指的是當前行的數據對象,key 是當前行的 鍵,index是當前行的索引值,column是數據列對象。 例子中,我們只用到model,在渲染每一行的時候,我們會把當前的對象的content值取出來, 進行截取處理,然后再作為結果提供給gridview渲染頁面。8.3模型類的getter和setter方法
使用方法
先看看語法格式: getter方法的方法名以 get 開頭,get后面的部分就是屬性的名字。 setter方法名以 set 開頭。 get后面的部分就是屬性的名字。 定義好方法后,就可以像普通屬性一樣使用。但是本質有區別:當這種屬性被讀取時,對應 的 getter方法將被調用;而當屬性被賦值時,對應的 setter 方法就調用。 如果只定義了 getter 方法,但沒有定義setter方法,那么屬性是只讀屬性,只能讀不能 寫,對它賦值會拋出異常。多數情況下,我們都是定義只有getter方法的只讀屬性,這種屬性一般不會持久化保存, 多數是一個業務邏輯需要的計算結果。8.4bootstrap
8.4.1全局css樣式
要重點理解柵格系統,它把頁面分成12個單元,你可以通過設置單元格數,來把頁面進行分 欄: 比如這里,左邊占8個單元,右邊占4個。對應代碼就這樣寫。 也可以分3欄,每欄4個單元。這是對應的代碼 博客的前臺頁面就分成了2個欄,左邊是9,右邊是3。8.4.2組件
先看字體圖標,有許多很漂亮很常見的圖標,這就是我們選用的審核按鈕,這是class屬性, 使用很簡單,我們只需要把這段代碼的class屬性改成我們需要的圖標屬性就可以了。 還有標簽,通過<h+數字>這種形式可以控制標簽的大小,用label+一個代表場景的英文單 詞,就可以設置不同的顏色。我們的標簽云就是用到這2個屬性來控制顏色和大小的。 徽章,我們會?它來做待審核評論條數的氣泡。使用也非常簡單。8.4.3JavaScript 插件
JavaScript 插件使用起來很簡單,不需要去編寫調試大量的js代碼,就可以給網頁帶來很酷 的用戶體驗。8.5評論審核功能的修改完善
8.5.1需求
先來看看,如何把待審核的評論排在排前面,并用不同底色區別。8.5.2思路
1.排序我們先設定好排序,狀態按正序排列,待審核的排前面,相同狀態的再按id來倒序排,新發
表的評論排前面。可以看到,待審核狀態的排到了前面,相同狀態里面,進一步是按id倒序
排的。
2.通過contentOptions來給狀態列的css樣式進行設置,設置待審核的數據格有不同的
底色進行區分。
這時候,要用到匿名函數,在函數中判斷當前對象的狀態是否為“待審核”,如果是的話,
我們就給數據單元格分配一個bg-danger類的樣式。
8.5.3代碼
?
添加審核按鈕
排序
待審核變色顯示
第1步,先添加1個審核按鈕。 在gridview中,是actionColumn這個類來負責展示動作按鈕。現在這個寫法,也是1種簡寫, 是最簡單的配置情況,只展示查看、修改和刪除按鈕。 下面,我們來看看如何對這個類進行定義, template 用template 來定義動作列中有哪些按鈕,大括號內括起來的就是按鈕,按鈕的功能靠控制器 中的動作來實現,按鈕的命名要對應控制器中動作的 actionID。 比如view這個按鈕,對應的就是控制器中文章查看的動作:activeView 默認情況時,只有前面3個按鈕。我們現在要增加1個審核按鈕,那么就在原先的基礎上添 加1個新的按鈕approve。 buttons 添加以后,還需要buttons來進1步設置這個按鈕: 用按鈕名來作為鍵名,值為按鈕的渲染回調函數,這里只需要對approve來進行設定,其他 的查看,修改和刪除按鈕已經默認設置好的,如果感興趣,可以去追蹤源碼看看: protected function initDefaultButtons(){ if (!isset($this->buttons['view'])) { $this->buttons['view'] = function ($url, $model, $key) { $options = array_merge([ 'title' => Yii::t('yii', 'View'), 'aria-label' => Yii::t('yii', 'View'), 'data-pjax' => '0', ], $this->buttonOptions); return Html::a('<span class="glyphicon-eye-open"></span>', $url, $options); }; } 這就是對評論查看按鈕的設置,這還用到了yii的t方法,用來翻譯成其他語言,比如這是 view,因為我們設定的語言是中文,所有你看到的提示是查看。 好了,回來繼續approve,這是回調函數參數的說明,title和label不?翻譯,直接寫中文, data-confirm可以在點擊這個按鈕時彈出個提示框,最后,返回的html代碼用到了bootstrap 中的圖標check。這樣就寫好按鈕的回調函數。 此外,還要補充1個不是很常見的屬性controller,如果按鈕對應的動作是在別的控制器中, 那么就通過controller來指定那個控制器,否則默認就是當前的控制器。 好的,我們到代碼里面來實現審核按鈕,保存刷新后,圖標出來了,點來看看,404沒有網頁 ,因為我們還沒有在控制器中寫對應的動作方法。 第2步,到控制器中來寫1個approve的動作,我們知道控制器的代碼總是很簡單的,有什 么具體任務讓模型做,做完后看看哪個視圖來渲染。 先把需要審核的對象找出來,然后讓模型去按業務需求完成審核工作,這里能不需要特別的 審核頁面,審核頁面是改變一下狀態,所以頁面還是回到評論管理,也就是index這個頁面就 可以了。 第三步,是去模型?件去實現審核這個業務需求,這個需求?常簡單,就是把評論的狀態從1 改為2,2代表已審核,返回1個布爾值,保存成功就返回true,這樣就可以了。 看看效果,點審核時會有個提示,確定后就會去執?審核的代碼,執?完后,還是回來這個 頁面。這時候剛才那條就已經審核通過了。
控制器
模型
8.5.4導航欄加個氣泡
用來顯示待審核的評論條數
8.5.4.1控制器
8.5.4.2視圖
?使用bootstrap進行加載氣泡的css樣式
第九部分 后臺完善用戶管理
9.1用戶管理需求
1. 認證 2. 前后臺認證的分離 3. 用戶管理頁面的完善 4. 授權9.2簡述
認證是鑒定用戶身份的過程。通常是使用用戶名和密碼來鑒別用戶身份。認證是登錄功能的基礎。
Yii框架是用用戶組件 yii\web\User 來管理用戶的認證狀態。分2個步驟來實現認證
1. 先給用戶組件 yii\web\User 指定1個含有實際認證邏輯的認證類。比如:app\models\User
2. 讓認證類user類實現 yii\web\IdentityInterface (相當于驗證方法)這個接口,接口包括這幾個方法。
9.3思路與步驟
9.3.1控制器
? 登錄頁面,在sitecontroller的actionlogin方法里面。 第一步 第1句判斷,先看看你是不是沒有進入系統的游客,如果是已經登錄進去的賬戶,那就不要 來登錄口這里玩,讓他去到首頁那里玩,isGuest這部分稍后還會進1步介紹。以下為代碼展示 第二部 接下來新建1個loginform對象,loginform是1個模型類,對應的是登錄表單,也有1般模 型類都有的屬性,驗證規則,還有業務邏輯。 第三步 回來控制器,這里是塊賦值,通過LoginForm對象拿到用戶提交的數據,然后調用表單模型的login方法。 login方法如果執成功,就代表驗證就通過,調用goBack返回到登錄前的頁面就可以了。否則依然停在登錄頁面,讓你繼續提交用戶名和密碼。 我們看到,是否能驗證通過,關鍵點在表單類model的login方法這里,這里執行成功,驗證就通過了。9.3.2LoginForm
表單類的login方法,主要有2個步驟: 1.第1步,模型類的validate方法,是看看表單提交的數據是否符合這些數據規則。 2.第2步,如果符合規則,接下就會執行Yii::$app->user->login()這句,這1句表示驗證已 經成功,注冊進入系統,這1句稍后會再解釋。?
9.4前后臺認證分離
?
9.4.1分離步驟
9.4.2代碼操作
修改對應adminuser的模型
9.4.3共用session連接
?
內容選擇魏曦教你學
總結
- 上一篇: 食品安全责任险多少钱一年食品安全责任险怎
- 下一篇: 蚊子会因为没血喝就饿死吗?