国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
[PHP]Yii2框架的坑,phpyii2框架
目錄
說點閑話
ActiveRecord被莫名寫入?
準備知識
代碼現(xiàn)場
總結(jié)問題
解決方法
你的Transaction生效了嗎?
問題總結(jié)
'Y-m-d'不被識別?
首頁 後端開發(fā) php教程 [PHP]Yii2框架的坑,phpyii2框架_PHP教程

[PHP]Yii2框架的坑,phpyii2框架_PHP教程

Jul 13, 2016 am 09:44 AM

[PHP]Yii2框架的坑,phpyii2框架

[PHP]Yii2框架的坑.md—/Users/zjh/Documents/我的文章/[PHP]Yii2框架的坑

Yii2框架的幾個隱蔽的坑

摘要:Yii2是一款優(yōu)秀的通用Web后端框架,結(jié)構(gòu)簡單優(yōu)雅、實用功能豐富、擴展性強、性能搞是他最突出的優(yōu)點。它優(yōu)秀的地方你在使用過程中總能輕易的發(fā)現(xiàn),無須贅述。而這些隱蔽的小瑕疵,顯得更有必要告訴大家。


  • 博客: http://www.cnblogs.com/jhzhu
  • 郵箱: jhzhuustc@gmail.com
  • 作者: 知明所以
  • 時間: 2015-08-17

目錄

  • Yii2框架的幾個隱蔽的坑
    • 目錄
    • 說點閑話
    • ActiveRecord被莫名寫入?
      • 準備知識
      • 代碼現(xiàn)場
      • 總結(jié)問題
      • 解決方法
    • 你的Transaction生效了嗎?
      • 代碼現(xiàn)場
      • 問題總結(jié)
      • 解決方法
    • 'Y-m-d'不被識別?
      • 代碼現(xiàn)場
      • 問題總結(jié)

說點閑話

距離上次寫博客,已經(jīng)有三個月了。在動手寫之前,總是帶著深深的罪惡感。被它折磨許久,終于,還是,動手了。

值得慶祝的一件事:最近開始,每天早上8:30起來健身了。有兩個視頻很好用,只需8分鐘,照著做一遍保證你(生)爽(不)到(如)爆(死)。(8分鐘腹肌鍛煉第2級-下載,8分鐘胸肌鍛煉第2級-下載)

值得反思的一件事:最近看了《叔本華美學(xué)隨筆》,改變了我一直以來對閱讀的看法。我曾經(jīng)以為閱讀是進步的源動力,卻被這本書深深的打臉了。來,先給大家分享一段:

<p>我們只管所見的外在環(huán)境并不像閱讀物那樣,把某已確定的見解強加給我們的頭腦,而只是為我們提供了素材和機會。去思考與我們的頭腦能力相稱、與當下的情緒相符的事情。所以,太多的閱讀會是我們的精神失去彈性,就像把一重物持續(xù)壓在一條彈簧上面就會是彈簧失去彈性一樣;而讓自己沒有自己思想的最穩(wěn)妥的辦法就是在空閑的每一分鐘馬上隨手拿起一本書。</p>

思考才是進步的源動力

好了,扯淡完畢,步入正題。

ActiveRecord被莫名寫入?

準備知識

代碼現(xiàn)場

<span class="x">/**</span>
<span class="x"> * @property integer $id</span>
<span class="x"> * @property string $name</span>
<span class="x"> * @property string $detail</span>
<span class="x"> * @property double $price</span>
<span class="x"> * @property integer $area</span>
<span class="x"> **/</span>
<span class="x">class OcRoom extends ActivieRecord</span>
<span class="x">{</span>
<span class="x">    ...</span>
<span class="x">}</span>

<span class="x">$room = OcRoom::find()      //先取出一個對象。</span>
<span class="x">    ->select([&#39;id&#39;])        //只取出&#39;id&#39;列</span>
<span class="x">    ->where([&#39;id&#39;=>20])</span>
<span class="x">    ->one();</span>
<span class="x">$room->save();              //保存,會發(fā)現(xiàn)此行的其它字段都被寫成默認值了。</span>

總結(jié)問題

這個例子的問題在于:

解決方法

然而,我們有什么解決辦法呢?提供幾種思路:

你的Transaction生效了嗎?

代碼現(xiàn)場

<span class="x">/**</span>
<span class="x"> * @property integer $id</span>
<span class="x"> * @property string $name</span>
<span class="x"> **/</span>
<span class="x">class OcRoom extends ActiveRecord</span>
<span class="x">{</span>
<span class="x">    public function rules()</span>
<span class="x">    {</span>
<span class="x">        return [[&#39;name&#39;,&#39;string&#39;,&#39;min&#39;=>2,&#39;max&#39;=>10]];</span>
<span class="x">    }</span>
<span class="x">    ...</span>
<span class="x">}</span>
<span class="x">class OcHouse extends ActiveRecord</span>
<span class="x">{</span>
<span class="x">    public function rules()</span>
<span class="x">    {</span>
<span class="x">        return [[&#39;name&#39;,&#39;string&#39;,&#39;max&#39;=>10]];</span>
<span class="x">    }</span>
<span class="x">    ...</span>
<span class="x">}</span>

<span class="x">$a = new OcRoom();</span>
<span class="x">$a->name = &#39;&#39;;                //name為空字符串,不滿足rules()條件。</span>

<span class="x">$b = new OcHouse();</span>
<span class="x">$b->name = &#39;我的房間&#39;;         //name合法,可以保存。</span>

<span class="x">$transaction = Yii::$app->db->beginTransaction();</span>
<span class="x">try{</span>
<span class="x">    $a->save();               //name字段不合法,無法驗證通過,在validate()階段已經(jīng)返回false,不會進行數(shù)據(jù)庫存儲的步驟,所以也不會拋出異常。</span>
<span class="x">    $b->save();               //name字段合法,可以正常保存。</span>

<span class="x">    $transaction->commit();   //提交后,發(fā)現(xiàn)$a保存失敗,而$b保存成功。</span>
<span class="x">}</span>
<span class="x">catch (Exception $e) </span>
<span class="x">{</span>
<span class="x">    Yii::error($e->getTraceAsString(),__METHOD__);</span>
<span class="x">    $transaction->rollBack();</span>
<span class="x">}</span>

問題總結(jié)

這段代碼的問題在于:

解決方法

$transation塊內(nèi),所有的save()都要判斷下返回值,如果為false,則直接拋出異常。

'Y-m-d'不被識別?

代碼現(xiàn)場

<span class="x">OcRenterBill extends ActiveRecord</span>
<span class="x">{</span>
<span class="x">    public function rules()</span>
<span class="x">    {</span>
<span class="x">        return [</span>
<span class="x">            [&#39;start_time&#39;,&#39;date&#39;,&#39;format&#39;=>&#39;Y-m-d&#39;],</span>
<span class="x">        ];</span>
<span class="x">    }</span>
<span class="x">}</span>

<span class="x">$a = new OcRenterBill();</span>
<span class="x">$a = &#39;2015-09-12&#39;;</span>
<span class="x">$a->save();                 //會報錯,說格式不對。</span>

問題總結(jié)

如果一開始,Yii框架就報錯,這個還不算坑??拥氖俏以贛ac上開發(fā)時,這個可以完全正常的工作,而發(fā)布到線上環(huán)境(Ubuntu)后,就彈出“屬性start_time格式無效”的錯誤。而參考官方文檔,發(fā)現(xiàn)這種格式是允許的官方文檔。

啊啊啊。各種試錯,最后發(fā)現(xiàn)如果改成php:Y-m-d,世界就清凈了。所以,如果你遇到這種問題,感激我吧。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1048749.htmlTechArticle[PHP]Yii2框架的坑,phpyii2框架 [PHP]Yii2框架的坑.md—/Users/zjh/Documents/我的文章/[PHP]Yii2框架的坑 Yii2框架的幾個隱蔽的坑 摘要:Yii2是一款優(yōu)秀的...
本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何在PHP中實施身份驗證和授權(quán)? 如何在PHP中實施身份驗證和授權(quán)? Jun 20, 2025 am 01:03 AM

tosecurelyhandleauthenticationandationallizationInphp,lofterTheSesteps:1.AlwaysHashPasswordSwithPassword_hash()andverifyusingspasspassword_verify(),usepreparedStatatementStopreventsqlineptions,andStoreSeruserDatain usseruserDatain $ _sessiveferterlogin.2.implementrole-2.imaccessccsccccccccccccccccccccccccc.

如何在PHP中安全地處理文件上傳? 如何在PHP中安全地處理文件上傳? Jun 19, 2025 am 01:05 AM

要安全處理PHP中的文件上傳,核心在於驗證文件類型、重命名文件並限制權(quán)限。 1.使用finfo_file()檢查真實MIME類型,僅允許特定類型如image/jpeg;2.用uniqid()生成隨機文件名,存儲至非Web根目錄;3.通過php.ini和HTML表單限製文件大小,設(shè)置目錄權(quán)限為0755;4.使用ClamAV掃描惡意軟件,增強安全性。這些步驟有效防止安全漏洞,確保文件上傳過程安全可靠。

PHP中==(鬆散比較)和===(嚴格的比較)之間有什麼區(qū)別? PHP中==(鬆散比較)和===(嚴格的比較)之間有什麼區(qū)別? Jun 19, 2025 am 01:07 AM

在PHP中,==與===的主要區(qū)別在於類型檢查的嚴格程度。 ==在比較前會進行類型轉(zhuǎn)換,例如5=="5"返回true,而===要求值和類型都相同才會返回true,例如5==="5"返回false。使用場景上,===更安全應(yīng)優(yōu)先使用,==僅在需要類型轉(zhuǎn)換時使用。

如何在PHP( - , *, /,%)中執(zhí)行算術(shù)操作? 如何在PHP( - , *, /,%)中執(zhí)行算術(shù)操作? Jun 19, 2025 pm 05:13 PM

PHP中使用基本數(shù)學(xué)運算的方法如下:1.加法用 號,支持整數(shù)和浮點數(shù),也可用於變量,字符串數(shù)字會自動轉(zhuǎn)換但不推薦依賴;2.減法用-號,變量同理,類型轉(zhuǎn)換同樣適用;3.乘法用*號,適用於數(shù)字及類似字符串;4.除法用/號,需避免除以零,並註意結(jié)果可能是浮點數(shù);5.取模用%號,可用於判斷奇偶數(shù),處理負數(shù)時餘數(shù)符號與被除數(shù)一致。正確使用這些運算符的關(guān)鍵在於確保數(shù)據(jù)類型清晰並處理好邊界情況。

如何與PHP的NOSQL數(shù)據(jù)庫(例如MongoDB,Redis)進行交互? 如何與PHP的NOSQL數(shù)據(jù)庫(例如MongoDB,Redis)進行交互? Jun 19, 2025 am 01:07 AM

是的,PHP可以通過特定擴展或庫與MongoDB和Redis等NoSQL數(shù)據(jù)庫交互。首先,使用MongoDBPHP驅(qū)動(通過PECL或Composer安裝)創(chuàng)建客戶端實例並操作數(shù)據(jù)庫及集合,支持插入、查詢、聚合等操作;其次,使用Predis庫或phpredis擴展連接Redis,執(zhí)行鍵值設(shè)置與獲取,推薦phpredis用於高性能場景,Predis則便於快速部署;兩者均適用於生產(chǎn)環(huán)境且文檔完善。

我如何了解最新的PHP開發(fā)和最佳實踐? 我如何了解最新的PHP開發(fā)和最佳實踐? Jun 23, 2025 am 12:56 AM

TostaycurrentwithPHPdevelopmentsandbestpractices,followkeynewssourceslikePHP.netandPHPWeekly,engagewithcommunitiesonforumsandconferences,keeptoolingupdatedandgraduallyadoptnewfeatures,andreadorcontributetoopensourceprojects.First,followreliablesource

什麼是PHP,為什麼它用於Web開發(fā)? 什麼是PHP,為什麼它用於Web開發(fā)? Jun 23, 2025 am 12:55 AM

PHPbecamepopularforwebdevelopmentduetoitseaseoflearning,seamlessintegrationwithHTML,widespreadhostingsupport,andalargeecosystemincludingframeworkslikeLaravelandCMSplatformslikeWordPress.Itexcelsinhandlingformsubmissions,managingusersessions,interacti

如何設(shè)置PHP時區(qū)? 如何設(shè)置PHP時區(qū)? Jun 25, 2025 am 01:00 AM

tosetTherightTimeZoneInphp,restate_default_timezone_set()functionAtthestArtofyourscriptWithavalIdidentIdentifiersuchas'america/new_york'.1.usedate_default_default_timezone_set_set()

See all articles