日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

yii2开发后记

發布時間:2025/4/16 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 yii2开发后记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前些天準備寫一個自己的博客CMS,考慮PHP框架的時候想到了據說非常強大的yii,接觸yii時發現有2.0版本,果斷嘗最鮮的。這么一嘗試感覺入了坑了,yii2.0是2014年12月發布的,估計國內用的人比較少,資料比較少,遇到問題百度yii2.0查出來好多1.0版本的答案,只好去google看英文站。一個小問題沒人提醒,又是STACK OVERFLOW又是自己翻源碼,弄了一天多。。。可謂是吃盡了苦頭。

不過網站總算是做出來了,地址:http://www.alwayscoding.cn,以后博客在此站同步更新,而且,我也可以在上面肆無忌憚的放上自己喜歡的文章了~~另外源碼也放在了github上,地址:https://github.com/zhenbianshu/blog-cms,有想使用本CMS的我可以提供支持~最后自己也總結出來了下列的使用心得,準備入手yii2.0的可以看一下,留個爪。


基礎總結

1.修改默認控制器/方法

yii默認是site控制器,可以在web.php中設置$config中的'defaultRoute'='xxxx';使用自定義默認的控制器。也可以改寫Yii::$app->defaultRoute屬性。

yii的默認方法是index,可以在vender/yiisoft/yii2/base/Controller.php 中進行初始設置,也可以在控制器中改寫defaltAction='action'。

2.添加獨立模塊

yii可以在modules文件夾中添加自定義模塊,添加完成后在web.php中的$config中的'modules'=[id=..class=...]設置模塊的開關。

模塊一般用于一些獨立的功能,像我站里的admin模塊整體負責后臺邏輯。

3.模型操作表設置

yii的模型有Model和ActiveRecord兩種,Model類用來處理基本的業務邏輯,沒有數據庫相關方法,如果要操作同名數據表,請繼承ActiveRecord類。

我們用一個在models文件夾中的Operation.class里Operation類來繼承yii\db\ActiveRecord來操作Operation表。

如果要操作其他表,也可以重寫public $tableName屬性來設置。或改寫其tableName方法(注意是靜態方法) : public static function tableName(){return 'tableName'}

4.視圖層構成

yii的視圖層使用.php文件,而且其內部的實現也多采用yii內置小部件的形式,如<?= LinkPager::widget(['pagination'=>$pagination]) ?>來表示其分頁類。

而且,像input這樣的小部件,用ActiveForm類來展現,yii會對每個自動加入ajax驗證,其一般的小部件都放在yii\widget\里,我們還可以在此文件夾里構建自定義的小部件類。

5.布局模式

yii會默認開啟布局模式,其布局模板為view中的layout中的main.php,我們可以在veder/yiisoft/yii2/web/controller.php基礎類中public $layout屬性修改模板文件的配置。

我們還可以設置關閉或指定特定的layout:

  • 控制器內控制 public $layout=false/'layout'
  • 控制器成員方法內控制 $this->layout=false/'layout'
  • 視圖中選擇布局 $this->context->layout=false/'layout'

6.模型的基本設置

yii的模型是MVC的處理器,它執行對MVC邏輯的處理。 model的屬性定義是其核心,由于默認定義魔術方法get/set,所以可以直接在model外調用$modle->attr='value',對模型的屬性進行獲取/賦值。

場景設置

yii中有對場景的定義,定義場景可以使得yii在不同的情況下返回不同的數據信息。用model的scenarios()方法來設置返回數據。

我們在使用model時傳入場景名 $model=new Model(['scenario'=>'login']);來確定場景。

規則設置

yii中對驗證規則的定義,使用rules()方法可以一條定義多條規則,也可以根據不同的場景進行定義。外部驗證時用$model->validate()方法來執行驗證。

在安全模式下,要進行安全驗證,即每一個屬性都要在rules里驗證,如果沒有特定規則,也要添加'safe'驗證。否則驗證失敗,存入數據庫也會失敗。

標簽設置

在處理表單時,多用$model->attributes屬性來表示全部的屬性。其中attributeLabels方法return一個數組用來表示視圖層中ActiveForm產生的各個表單項的label標簽

7.引用JS/CSS文件

yii中的view也使用面向對象方式 ,所以引入CSS和JS文件要用特殊的方法。

  • 使用$this->registerJsFile('js.js')來引入js文件;
  • 使用$this->registerJsFile('js.js')來引入js文件;

8.分頁類的使用

//在模型中計算出總數量 $count=$this->find()->where()->count(); //用總條數和設定的每頁個數實例化一個yii\data\Pagination類 $page=new Pagination([totalCount' => $count,'defaultPageSize' => 2,]); //使用分頁類的屬性搜索想要的數據,并返回數據 $res=$this->find()->where()->offset($page->offset)->limit($page->limit)->all(); return [$res,$page]; //使用控制器渲染頁面 $data=$model->getData(); return $this->render('index',$data); //在視圖頁面中使用數據。 foreach($res as key)... yii\widgets\LinkPager::widget([pagination=$page,prevPageLabel='上一頁'])。

9.創建url

use yii\helpers\Url; Url::to(['xxx/xxx']); //或 Yii::$app->urlManager->createUrl('xxx.xxx')

10查詢構建器

yii里的QUERY查詢語句構造器非常簡單好用,它可以用在模型和控制器中,雖然可能會造成模型與表不對應,但其構成接近sql語句,使用它可以輕易寫出復雜的sql語句而不必嚴格遵從yii的內置規則。

方法為:

$res=(new yii\db\Query())->select()->from()->leftJoin()->where->()->all();

其中where語句較為復雜:

where('in','id',$array)或where('id'=>$array)

具體可以查看http://www.yiichina.com/doc/guide/2.0/db-query-builder中對where方法的解析。

11.自定義函數

yii里面自定義函數可以在vendor/yiisoft/yii2/helpers/文件夾里,新建一個XXX.php文件,然后定義一個自定義類,再定義靜態方法YYY()。

使用時應用基命名空間,use yii\helpers\XXX,然后用類來引用基靜態方法XXX::YYY()

12.關聯模型

yii里面的關聯模型,用來在取得當前表內的一條記錄時,會取出對應表的記錄。如A表內每取出一條信息,也取出B表中跟A表對應有信息,在ModelA里定義一個getBtable方法

function getBtable() {return $this->hasOne/hasMany(Btable::className,['bid'=>'aid']); }

查詢時可以使用joinWith('Btable')->find();會在查找時查找其關聯對象;也可以使用$this->find()等方法結果對象

使用$res->btable來直接引用對象。

使用$res[n]->btable->attr來引用B表的對應屬性。

13.使用ActiveForm創建表單

yii2中使用小部件創建view視圖的步驟: 設置一個Model設置其屬性

public $username; public $password;

設置其rule或場景等

public function rules(){return [[['username', 'password','conpass'], 'required'],['conpass', 'password',]; }

設置其label

public function attributeLabels(){return ['username' => '管理員','password' => '密碼',];}

然后在controller中將model的實例渲染進去:

$this->render('index',['model'=>(new Model/ActiveRecord)])

最后在頁面中使用ActiveForm

use yii\widgets\ActiveForm; <?php $form = ActiveForm::begin(['action' => ['log/login'],'method'=>'post']); ?><?= $form->field($model, 'username') ?><?= $form->field($model, 'password') ?><div class="form-group"><?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?></div> <?php ActiveForm::end(); ?>

14.使用驗證碼

在controller中設置驗證碼的獨立方法

public function actions() {return ['captcha' => ['class' => 'yii\captcha\CaptchaAction','height' => 50,'width' => 80,'minLength' => 4,'maxLength' => 4],];}

在model里設置rule和label,label同上

public function rules(){return [['verifyCode', 'captcha','captchaAction'=>'admin/log/captcha'],]; }

(captchaAction要設置為controller中的位置,如果自定義module要設置module) 在view中使用

use yii\captcha\Captcha; <?= $form->field($model, 'verifyCode')->widget(Captcha::className(),['captchaAction'=>'log/captcha','imageOptions'=>['alt'=>'點擊換圖', 'style'=>'cursor:pointer']]) ?>

15.視圖中塊的使用

塊內容在$this->beginBlock(['id'=>xxx])和$this->endBlock()之間定義,在layout中使用$view->block[id]來引用。可以在完成向模板中導入視圖數據。

也可以定義$this->var=xxx;在layout中用$this->var來引用。

16.更新和刪除

更新
//查找到一條結果 $res=$this->find()->where()->one(); //對結果修改 $res->attr='xxx'; //執行更新操作 $res->update();
刪除
//刪除一條數據 $this->findOne($id)->delete(); //刪除所有符合條件的數據 $this->deleteAll([where]);

注意和竅門

1.URL模塊間跳轉

在模塊中用Url::to()方法創建URL時,會自動在前面添加模塊名,導致無法跳轉到其他模塊,我們可以在字符串前添加'//'符來返回根模塊,例如Url::to(['//index/index'])表示跳轉到初始地址。

2.初始化變量

想在控制器中每一個操作前,初始化一個變量的話不要重寫__construct構造函數,因為它需要傳入各種變量。最好重寫beforeAction()函數,它會在執行每一個action時都執行一下。

并且注意:方法的最后一定要添加return true語句。

3.在JS中使用YII的變量

若想在JS中使用YII的URL變量等,可以使用html中的script標簽,將變量在第一次渲染視圖時預先解析出來,將下面代碼放在需要使用變量的地方之前。

<script type="text/javascript">var key="<?=Url::to(['xxx/xxx']) ?>" </script>

然后在JS文件中正常使用。

4.全局常量的定義

我們可以在config文件夾中的params.php中定義全局常量。

然后在腳本中用Yii::$app->params['key']來引用。

5.yii模型屬性轉數組

YII用toArray()方法可以將模型的屬性轉換為數組進行輸出,可獨立使用,也可以在查詢時用連續操作方式使用。

6.在使用controller渲染view頁面時,一定要在render前加echo或return 寫作echo/return $this->render('view',$data);

7.yii中的屬性,謹記!在ActiveForm中如果數據表中有了此字段,就不要再用public聲明一個屬性了,會導致attribute無法賦值。。。。(血淚)。

轉載于:https://www.cnblogs.com/zhenbianshu/p/5126416.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的yii2开发后记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产91久久精品一区二区 | av永久免费 | 九色影视 | 日日夜夜爽| 91啪国产在线 | 欧美123| 国产精品三区在线观看 | 狠狠躁夜夜躁人人爽天天高潮 | 国产麻豆一区二区三区在线观看 | 久操精品 | 白丝美女喷水 | 蜜桃9999| 四虎影视免费观看 | 国产区av | 日韩无码精品一区二区 | 一区二区片| 久久九九视频 | 国产做受高潮漫动 | 天天干天天草天天射 | 午夜av免费在线观看 | 亚洲精品亚洲 | 国产福利91精品一区二区三区 | 九九热免费在线 | 国产精品久久久久久久久借妻 | 国产三级精品在线观看 | 亚洲 欧美 日韩 综合 | 丰满少妇被猛烈进入一区二区 | 日本wwww视频| 国产黄色免费网站 | 亚洲成人高清在线观看 | 性囗交免费视频观看 | av手机版| 91精东传媒理伦片在线观看 | 正在播放超嫩在线播放 | 激情文学亚洲 | 国产一区二区三区精品视频 | 午夜精品一区二区三区三上悠亚 | 国产黑丝在线播放 | 无遮挡的裸体按摩的视频 | 久久99精品国产麻豆婷婷洗澡 | 少妇一晚三次一区二区三区 | 狠狠人妻久久久久久综合麻豆 | 99视频在线播放 | 国产美女作爱全过程免费视频 | 男女操操视频 | 亚洲αv | 加勒比av在线播放 | 99在线免费| www.人人草 | 深爱激情综合 | 99久久久久久久久久 | 99极品视频 | 污片在线免费看 | 婷婷天堂网 | 中文自拍 | 日本午夜精品理论片a级app发布 | 在线播放国产精品 | 精品视频免费看 | 亚洲少妇中文字幕 | 蜜臀av一区二区三区有限公司 | 日本三级韩国三级美三级91 | 欧美日本一二三区 | 精品一区电影 | 国产剧情av引诱维修工 | 少妇视频网 | 欧美人体视频一区二区三区 | 欧美爱爱网 | 国产精品视频区 | 黄色三级免费观看 | 日韩黄色网址 | 少妇搡bbbb搡bbbb | 亚洲天堂av网站 | 国产精品36p| www.国产.com | 亚洲一区二区三区加勒比 | 性——交——性——乱免费的 | 国产嫩草av | 欧美精品高清 | 日韩三级电影网址 | 咪咪色影院 | 久久精品无码一区二区三区毛片 | 日韩欧美国产精品综合嫩v 国产小毛片 | 国产美女福利视频 | 免费看a毛片| 青青草原综合久久大伊人精品 | 女生被男生桶 | 国产一级久久 | 又爽av| 91在线免费看片 | 性高潮免费视频 | 91久久久久久久久久久久 | 欧美xxxx18国产 | 99这里有精品 | 欧美天天 | 美女视频黄色在线观看 | 国产精品中文在线 | 西西人体高清44rt·net | 日韩av中文字幕在线免费观看 | 欧美色性视频 |