国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

PHP的Yii框架使用中的一些錯誤解決方法與建議

2020-03-22 19:12:31
字體:
來源:轉載
供稿:網友
此文意在記錄 Yii 開發過程中的小問題解決方案,不全面,不權威,不是教程。自己寫過,覺得可以解決問題,以后也可能用上,就記記吧。 1. Yii 中 Js 和 Css 文件的引入。
我們就從最簡單的問題開始吧,說起來也不是問題,只是語法罷了。假設我們的 js 文件都放在和 protected 同一層的 js 文件夾里,css 文件都放在和 protected 同一層的 css 文件夾里,好吧,規范就是這樣的...那我們可以在對應的 view 界面按下面這樣寫,css 和 js 函數的參數是不同的哦...(之前因為這個調了一個小時..)
注冊 js 文件的第二個參數是 js 所放的位置,可選三個:CClientScript::POS_HEAD 放在 Head 部分 CClientScript::POS_BEGIN 放在 Body 開始處 CClientScript::POS_END 放在 Body 結束處,沒有特別要求就不用填了...注冊 Css 文件的第二個參數是 media,,有興趣的同學點這里,目前還是默認就好...
對于 Jquery 這樣的 js ,用 registerCoreScript 不會造成莫名奇妙的錯誤...//注冊 js 文件 Yii::app()- clientScript- registerScriptFile(Yii::app()- baseUrl.'/js/project1.js',CClientScript::POS_HEAD); //注冊 css 文件 Yii::app()- clientScript- registerCssFile(Yii::app()- baseUrl.'/css/project1.css'); //注冊 Jquery 文件 Yii::app()- clientScript- registerCoreScript('html' target='_blank'>jquery'); 2. Yii isNewRecord 修復
Yii 的 Model 的 isNewRecord 屬性是很好用的,可以根據這個屬性進行分情況討論。但是,假如我們開啟了事務機制或是其他情況,造成數據插入后又被回滾了,這時數據庫里沒有該條記錄,但是 isNewRecord 是 flase,即認為已經不是新紀錄了。解決方法是用主鍵去訪問數據庫,判斷究竟是不是新紀錄,而我們在用到這個屬性之前要先按下面處理一下。以下 Model 是 Post,主鍵是 id:if(!$model- isNewRecord) $db_exist = Post::model()- findByPk($model- if($db_exist == NULL) $model- isNewRecord = true;
3.Yii 生成 隱藏輸入域
雖然自己寫一個輸入域很容易(不就是 display:none 嘛),但是有時架不住需要按照 Yii 的表單代碼格式呀,反正就一句話... php echo $form- hiddenField($model,'name'); php if($model- isNewRecord) echo $form- hiddenField($model,'path',array('size'= 60,'maxlength'= 128,'id'= 'path1')); 4. Yii 生成下拉菜單
很多時候我們在 form 里需要一個下拉菜單,這時候 Chtml 的 listdata 就很好用的。假如我們數據庫里的字段只有很少的可能,比如 0 和 1,可以按下面寫:
echo $form- dropDownList($model,'is_marry',array('0'= '否','1'= '是')); 這時候,你看到的就是 是 和 否 的下拉菜單,選擇 '是' 提交的時候這個字段填的就是 1 ,'否' 就是 0 。當然,經常不只這么簡單,我們可以在 Model 里面添加一個函數用于生成下拉菜單的數組,然后在 view 里去調用就行了。這個函數的數據可以自己寫的,或者在數據庫查找得來的。下面用了 listdata, 具體意思是以 model 中 id 為 鍵, name 為值。/* 寫在 model 里 */ public function getUserOptions() $models = User::model()- findAll(); $models = User::model()- findAllByAttributes(array('is_regeister'= '1')); return CHtml::listdata($models, 'id', 'name'); /* 寫在 view 的界面里 */ echo $form- dropDownList($model,'user_id',User::model()- getUserOptions());
5.Yii 開啟事務機制
在你同時保存幾條記錄到數據庫時,你可能很有必要開啟事務機制。Yii 開啟事務機制很容易,只要三句話就夠了。/*開啟事務機制*/ $transaction = Yii::app()- db- beginTransaction(); /* 成功則 commit */ $transaction- commit(); catch(Exception $e) $transaction- rollBack(); 比較完整的像這樣:
if($_POST['ModelA']) /*開啟事務機制*/ $transaction = Yii::app()- db- beginTransaction(); try /*此處省略一堆邏輯*/ $modelA- save(); $modelB- save(); /* 成功則 commit */ $transaction- commit(); $this- redirect(array('view','id'= $model- id)); catch(Exception $e) $transaction- rollBack(); 不過我一般會像下面這樣,有什么好處請自行體會...if($_POST['ModelA']) /*開啟事務機制*/ $transaction = Yii::app()- db- beginTransaction(); try $validated = true; /*此處省略一堆邏輯*/ $valid = $modelA- save(); $validated = $valid & $validated; /*此處繼續省略一堆邏輯*/ $valid = $modelB- save(); $validated = $valid & $validated; /* 成功則 commit */ if($validated) $transaction- commit(); $this- redirect(array('view','id'= $model- id)); else /*不成功即回滾 */ $transaction- rollBack(); catch(Exception $e) $transaction- rollBack(); 6.關聯表查詢相同字段出錯。
有時候我們建了兩個表,但是兩個表有相同的字段,在用 CDbCriteria 進行 with 關聯查詢搜索時候,如果沒有進行額外設置,那會出現查詢錯誤,大概的意思就是 Mysql 語句模糊。這時候,我們在主表設置一個別名就好了,然后查詢相關字段的時候注意把 名字加上就行。

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 奇台县| 大姚县| 彝良县| 巴林左旗| 峨山| 丽江市| 云梦县| 巫溪县| 天台县| 梅州市| 玛纳斯县| 鹤山市| 额敏县| 泾源县| 台南县| 东莞市| 奉新县| 长葛市| 丰镇市| 陕西省| 辽阳县| 分宜县| 西林县| 梓潼县| 梁河县| 克拉玛依市| 元阳县| 韩城市| 蓬溪县| 德庆县| 方正县| 石楼县| 两当县| 柞水县| 盐边县| 宁陕县| 芷江| 阿图什市| SHOW| 鞍山市| 焦作市|