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

Table des matières
[PHP]Yii2框架的坑,phpyii2框架
目錄
說點(diǎn)閑話
ActiveRecord被莫名寫入?
準(zhǔn)備知識
代碼現(xiàn)場
總結(jié)問題
解決方法
你的Transaction生效了嗎?
問題總結(jié)
'Y-m-d'不被識別?
Maison développement back-end tutoriel 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)雅、實(shí)用功能豐富、擴(kuò)展性強(qiáng)、性能搞是他最突出的優(yōu)點(diǎn)。它優(yōu)秀的地方你在使用過程中總能輕易的發(fā)現(xiàn),無須贅述。而這些隱蔽的小瑕疵,顯得更有必要告訴大家。


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

目錄

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

說點(diǎn)閑話

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

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

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

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

思考才是進(jìn)步的源動力!

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

ActiveRecord被莫名寫入?

準(zhǔn)備知識

代碼現(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)此行的其它字段都被寫成默認(rè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字段不合法,無法驗(yàn)證通過,在validate()階段已經(jīng)返回false,不會進(jìn)行數(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();                 //會報(bào)錯,說格式不對。</span>

問題總結(jié)

如果一開始,Yii框架就報(bào)錯,這個還不算坑??拥氖俏以贛ac上開發(fā)時(shí),這個可以完全正常的工作,而發(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)秀的...
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefa?on, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1502
276
Porce de variable PHP expliquée Porce de variable PHP expliquée Jul 17, 2025 am 04:16 AM

Les problèmes et les solutions courants pour la portée de la variable PHP incluent: 1. La variable globale ne peut pas être accessible dans la fonction, et elle doit être transmise en utilisant le mot-clé ou le paramètre global; 2. La variable statique est déclarée avec statique, et elle n'est initialisée qu'une seule fois et la valeur est maintenue entre plusieurs appels; 3. Des variables hyperglobales telles que $ _get et $ _post peuvent être utilisées directement dans n'importe quelle portée, mais vous devez faire attention au filtrage s?r; 4. Les fonctions anonymes doivent introduire des variables de portée parents via le mot clé Utiliser, et lorsque vous modifiez les variables externes, vous devez passer une référence. La ma?trise de ces règles peut aider à éviter les erreurs et à améliorer la stabilité du code.

Comment gérer les téléchargements de fichiers en toute sécurité dans PHP? Comment gérer les téléchargements de fichiers en toute sécurité dans PHP? Jul 08, 2025 am 02:37 AM

Pour gérer en toute sécurité les téléchargements de fichiers PHP, vous devez vérifier la source et taper, contr?ler le nom et le chemin du fichier, définir les restrictions du serveur et traiter les fichiers multimédias deux fois. 1. Vérifiez la source de téléchargement pour empêcher le CSRF via le jeton et détecter le type de mime réel via FINFO_FILE en utilisant le contr?le de liste blanche; 2. Renommez le fichier à une cha?ne aléatoire et déterminez l'extension pour la stocker dans un répertoire non Web en fonction du type de détection; 3. La configuration PHP limite la taille de téléchargement et le répertoire temporaire Nginx / Apache interdit l'accès au répertoire de téléchargement; 4. La bibliothèque GD résait les images pour effacer des données malveillantes potentielles.

Commentant le code en php Commentant le code en php Jul 18, 2025 am 04:57 AM

Il existe trois méthodes courantes pour le code de commentaire PHP: 1. Utiliser // ou # pour bloquer une ligne de code, et il est recommandé d'utiliser //; 2. Utiliser /.../ pour envelopper des blocs de code avec plusieurs lignes, qui ne peuvent pas être imbriquées mais peuvent être croisées; 3. Compétences combinées Commentaires tels que l'utilisation / if () {} / pour contr?ler les blocs logiques, ou pour améliorer l'efficacité avec les touches de raccourci de l'éditeur, vous devez prêter attention aux symboles de fermeture et éviter les nidification lorsque vous les utilisez.

Comment les générateurs fonctionnent-ils en PHP? Comment les générateurs fonctionnent-ils en PHP? Jul 11, 2025 am 03:12 AM

AgeneratorInphpisamemory-EfficientwaytoterateOrgedatasetsByyieldingValuesonEatatimeIntedofreturningThemallAtonce.1.GeneratorsUsEtheieldKeywordToproduceValuesondemand, ReducingMemoryUsage.2.TheyAreusefulForHandlingBigloops, ReadingLargeFiles, OR OR.

Conseils pour écrire des commentaires PHP Conseils pour écrire des commentaires PHP Jul 18, 2025 am 04:51 AM

La clé pour rédiger des commentaires PHP est de clarifier l'objectif et les spécifications. Les commentaires devraient expliquer "pourquoi" plut?t que "ce qui a été fait", en évitant la redondance ou trop de simplicité. 1. Utilisez un format unifié, tel que DocBlock (/ * /) pour les descriptions de classe et de méthode afin d'améliorer la lisibilité et la compatibilité des outils; 2. Soulignez les raisons de la logique, telles que pourquoi les sauts JS doivent être sortis manuellement; 3. Ajoutez une description d'une vue d'ensemble avant le code complexe, décrivez le processus dans les étapes et aidez à comprendre l'idée globale; 4. Utilisez TODO et FIXME Rationalement pour marquer des éléments et des problèmes de taches pour faciliter le suivi et la collaboration ultérieurs. De bonnes annotations peuvent réduire les co?ts de communication et améliorer l'efficacité de la maintenance du code.

Apprendre PHP: un guide du débutant Apprendre PHP: un guide du débutant Jul 18, 2025 am 04:54 AM

Toléarnphpeffective, startBySettingUpAlocalServerERironmentUsingToolsLILYXAMPPANDACODEDITERLIGHILLEVSCODE.1) INSTRUSITIONXAMPFORAPACHE, MYSQL, ANDPHP.2) USACODEDEDITORFORSYNTAXSUPPORT.3)

Comment accéder à un caractère dans une cha?ne par index en php Comment accéder à un caractère dans une cha?ne par index en php Jul 12, 2025 am 03:15 AM

En PHP, vous pouvez utiliser des crochets ou des accolades bouclées pour obtenir des caractères d'index spécifiques à la cha?ne, mais les crochets sont recommandés; L'index commence à partir de 0 et l'accès à l'extérieur de la plage renvoie une valeur nulle et ne peut pas se voir attribuer une valeur; MB_substr est nécessaire pour gérer les caractères multi-octets. Par exemple: $ str = "Hello"; echo $ str [0]; sortie h; et les caractères chinois tels que MB_substr ($ str, 1,1) doivent obtenir le résultat correct; Dans les applications réelles, la longueur de la cha?ne doit être vérifiée avant le boucle, les cha?nes dynamiques doivent être vérifiées pour la validité et les projets multilingues recommandent d'utiliser des fonctions de sécurité multi-octets uniformément.

Tutoriel d'installation rapide PHP Tutoriel d'installation rapide PHP Jul 18, 2025 am 04:52 AM

Toinstallphpquickly, usexAmpPonWindowsorHomebrewonMacos.1.onwindows, downloadAndInstallxAmppp, selectComponents, startapache et placefilesInhtdocs.2.

See all articles