Les exemples de cet article résument les points de connaissances courants de cakephp. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants?:
1. Appelez le modèle d'autres contr?leurs et redirigez
Méthode 1?:
Appelez le modèle hello.ctp sous /views/tasks/tasks ici$this -> viewPath = 'tasks'; $this -> render('hello');Méthode 2 (avec paramètres) : $this->redirect(array('controller'=>'users','action'=>'welcome',urlencode($this->data['name'].'haha')) );
2. Pour interroger
utilisez directement les paramètres de sql?:$this->PostContent->query("select * from user"); find(): $clue = $this->clue->find('all', array( 'fields' =>array( 'id', 'title', 'content' ), 'order' => 'id ASC', 'conditions' => array('id' => '1'), ) );find, le premier peut être all, first et count, et le deuxième paramètre est un tableau. La clé du tableau peut être?: conditions, champs, ordre, limite, décalage et jointures. Ajouté :
$this->clue->create(); $this->clue->save($this->data);Modifié :
$this->clue->create(); $this->clue->save($this->data);Supprimer?:
$this->clue->delete($id)
3. Lorsque les styles publics ne sont pas nécessaires
$this->layout = false;Pas besoin de restituer une vue
$this->autoRender = false;
Définir des méthodes/classes publiques
Méthode 1?: Vous pouvez définir une méthode publique dans /app/Controller/AppController.php Appeler$this->test();Méthode 2?: Créer UtillComponent.php dans /app/controllers/components
<?php class UtillComponent extends Object { function juanstr ($str) { return $str.'+juanstr'; } } ?>Appeler :
var $components = array('Utill'); $digit1 = $this->Utill->juanstr($digit1);
5. Définir le message d'invite
$this->Session->setFlash(__('The user has been saved')); <p class="wrong"><?php echo $this->Session->flash();?></p>
ou
$this->Session->write('Message.auth',array('message'=>__('The user has been saved.',true),'element'=>'','params'=>array())); <p class="wrong"><?php echo $this->Session->flash('auth');?></p>
6. Les paramètres de session
sont disponibles sur?: http:/ /ipnx.cn/check(string $name);
del(string $name); <p>delete(string $name);
del(string $name);<br/>delete(string $name);
Supprime la variable de session spécifiée par $name. valid renvoie true lorsque la session est valide. Il est préférable de l'utiliser avant l'opération read() pour déterminer si la session à laquelle vous souhaitez accéder est effectivement valide.read(string $name);
write(string $name, mixed $value);
7. Formulaire
<?php echo $this->Form->create('Subject',array( 'type' => 'post', 'inputDefaults'=>array( 'p'=>false, 'label'=>false ), 'url'=>array( 'controller'=>'subjects', 'action'=>'edit' ), 'onsubmit'=>'return validateCallback(this, dialogAjaxDone);' //提交前驗證 ) ); echo $this->Form->input('id',array('type'=>'hidden')); echo $this->Form->input('uid',array('type'=>'hidden')); ?> <ul class="usr_info_basic"> <li> <p class="ti">下拉單選(編輯頁面會自動判斷選中)</p> <p class="ce"> <?php echo $this->Form->input('type',array('type'=>'select' ,'class'=>'ipt','options' => array(0=>'文章',1=>'專題', 2=>'圖組')));?> </p> </li> <li> <p class="ti">多選</p> <p class="ce"> <?php echo $this->Form->input('pushtype', array('type'=>'select', 'options' => $pushtype,//所有選項 'multiple'=>'checkbox', 'selected' => $pushtypes,//選中的項 )); ?> </p> </li> </ul> <p class="btns_3"> <button class="btn3" type="submit"><span>保存</span></button> <button class="btn3 btn3_1 close"><span>取消</span></button> </p> <?php echo $this->Form->end();?>
8. ;
Appeler directement dans le contr?leur :$this->log('Something brok2',LOG_DEBUG);ou appeler dans la vue :
Les types de journaux sont à peu près les suivants?:
$levels = array( LOG_WARNING=> 'warning', LOG_NOTICE=> 'notice', LOG_INFO=> 'info', LOG_DEBUG=> 'debug', LOG_ERR=> 'error', LOG_ERROR=> 'error' );Les fichiers journaux sont enregistrés dans / répertoire app/tmp/logs. Il existe des options de configuration des journaux dans le fichier /app/config/core.php?:
define('LOG_ERROR', 2);
9. Rendu Chemin
echo APP . 'webroot' . DS; //D:\wamp\www\cakephp\app\webroot\ echo APP . 'webroot' ; D:\wamp\www\cakephp\app\webroot
Pièce jointe?: 21 conseils à conna?tre sur CakePHP
Cet article peut le est considéré comme le plus classique parmi les tutoriels CakePHP. Bien qu'il ne s'agisse pas d'une série complète, étape par étape, l'auteur a résumé sa propre expérience dans l'utilisation de CakePHP en 21 éléments, qui sont très utiles, notamment pour les novices. Lors de la traduction, certains mots propres à CakePHP ont été intentionnellement laissés non traduits, comme contr?leur, modèle, etc. Je crois que les personnes qui ont appris CakePHP devraient être capables de comprendre leur signification immédiatement. De plus, le wiki de CakePHP a expiré et a été remplacé par un site Web appelé bakery. Les liens vers le wiki cités dans l'article original ont également été mis à jour vers la boulangerie.Créer rapidement des pages statiques
Je souhaite créer plusieurs pages, qui contiennent uniquement des données statiques, utilisent la mise en page par défaut et ne nécessitent aucun modèle. Au départ, j'ai essayé de créer un contr?leur et de définir une action pour chaque page statique. Mais cette méthode est lourde et ne convient pas pour créer rapidement des pages statiques. En fait, vous pouvez le faire en utilisant le contr?leur de pages - créez simplement une vue sous le dossier vues/pages et accédez-y via /pages. Par exemple, j'ai créé /views/pages/matt.thtml, accessible via http://ipnx.cn/.Changer le titre de la page statique
Si vous souhaitez modifier le titre de la page lors de l'utilisation du contr?leur de pages, ajoutez simplement le code suivant à la vue?:<? $this->pageTitle = 'Title of your page.'; ?>
Envoyer des données à la mise en page dans une page statique
Si vous devez transmettre des données à la mise en page (par exemple , indiquant quelle partie de la barre de navigation doit être mise en surbrillance (Variables affichées), vous pouvez ajouter le code suivant à la vue?:<? $this->_viewVars['somedata'] = array('some','data'); ?>Ce tableau peut être accessible via $somedata dans la mise en page.
Créez rapidement une gestion en arrière-plan
Si vous devez créer un programme de gestion en arrière-plan et souhaitez que toutes les actions de gestion soient situées dans un dossier spécifique, ouvrez config/core. php et supprimez le commentaire de la ligne suivante?:define('CAKE_ADMIN', 'admin');
這樣所有以"admin_"開頭的action都可以通過 /admin/yourcontroller/youraction 來訪問。例如,如果在posts controller中創(chuàng)建了名為"admin_add"的action,那么可以通過 www.example.com/admin/posts/add 訪問這個action。這樣就可以方便地為admin目錄設(shè)置密碼以避免他人隨意訪問。
查看后臺執(zhí)行的SQL語句
只需改變config/core.php中的DEBUG常量,即可看到后臺執(zhí)行的SQL語句。0為產(chǎn)品級,1為開發(fā)級,2為完整調(diào)試SQL,3為完整調(diào)試SQL并顯示對象數(shù)據(jù)。我通常將DEBUG設(shè)置為2,這樣每頁的底部會顯示出一個包含SQL調(diào)試信息的表格。
如果頁面底部添加的表格會破壞頁面布局(特別是使用Ajax獲取頁面并顯示到頁面中間而不是底部時),你可以在CSS中添加以下代碼以隱藏調(diào)試信息:
#cakeSqlLog { display: none; }
這樣既能保持頁面布局,又可以通過查看源代碼來看到調(diào)試信息。當(dāng)然最后發(fā)布網(wǎng)站時別忘了將調(diào)試級別改回0。
獲取豐富的開發(fā)文檔
別總是盯著手冊。wiki和API也是無價之寶。wiki中的開發(fā)指南十分有用,而API文檔初看起來比較難,但你很快就會發(fā)現(xiàn)這里的信息對你創(chuàng)建CakePHP網(wǎng)站十分重要。
使用bake.php
Bake是個命令行PHP腳本,可以根據(jù)數(shù)據(jù)庫自動生成model、controller和view。在開發(fā)的最初階段,我強烈推薦使用scaffolding讓你的原型程序跑起來。但如果你清楚地知道scaffolding不合適,我推薦你使用bake。bake會生成所有的文件并保存到磁盤上,以便你隨意修改。這樣能節(jié)省創(chuàng)建關(guān)聯(lián)、view、基本的CRUD crollder操作的重復(fù)工作。
(譯者注:CRUD - Create, Read, Update, Delete,數(shù)據(jù)庫應(yīng)用的四種基本操作,即"增刪查改"。)
bake很方便。你只需在數(shù)據(jù)庫中建立一個表,然后到 /cake/scripts/ 目錄下執(zhí)行php bake.php 即可。
如果你通過交互方式來運行bake,它會分幾步提示你創(chuàng)建model、controller和view。創(chuàng)建結(jié)束之后,我通常會閱讀所有生成的代碼并做必要的修改。
發(fā)布程序時注意權(quán)限
有一次我在發(fā)布程序時,將整個cake目錄打包然后用scp上傳到了服務(wù)器上。只要一關(guān)閉調(diào)試信息,就會出現(xiàn)錯誤——數(shù)據(jù)庫調(diào)用無法返回任何數(shù)據(jù)。我一籌莫展,因為我必須通過調(diào)試信息才能調(diào)試問題。后來有人告訴我,/app/tmp應(yīng)當(dāng)對apache可寫。將權(quán)限改為777之后問題就解決了。
復(fù)雜model驗證
我需要進(jìn)行更復(fù)雜的驗證,而不僅僅是驗證輸入框非空或者符合某個正則表達(dá)式這樣的簡單驗證。例如,我要驗證用戶注冊時使用的郵件地址是否已被使用。在wiki中我找到了這篇關(guān)于高級驗證的文章,其中提到了一些十分有用的高級驗證方法。
記錄錯誤日志
$this->log('Something broke');
這樣可以將錯誤記錄到 /tmp/logs/ 中(我最初以為會記錄到apache的錯誤日志中)。
讓controller使用其他model
如果你的controller需要調(diào)用來自不同model的數(shù)據(jù),只要在controller開頭使用如下代碼:
class yourController extends AppController { var $uses = array('Post','User'); }
這樣controller就能訪問Post和User model了。
創(chuàng)建不使用數(shù)據(jù)庫表的model
我需要創(chuàng)建一個不使用任何表的model。例如,我想通過$validate數(shù)組方便底驗證輸入數(shù)據(jù),保持model邏輯的正確性。但創(chuàng)建model時對應(yīng)的表不存在,CakePHP就會報錯。通過在model中加入以下代碼可以解決這個問題:
var $useTable = false;
你也可以通過這種方法改變model對應(yīng)的表名。
var $useTable = 'some_table';
重定向之后記得exit()
對于有經(jīng)驗的人來說這應(yīng)當(dāng)是理所當(dāng)然的事兒,調(diào)用 $this->redirect() 之后,剩下的代碼如果不想運行要exit()。我也這樣做,但以前曾經(jīng)認(rèn)為 $this->redirect() 會為我調(diào)用exit(實際上不會)。
高級model函數(shù)
翻翻API就能發(fā)現(xiàn)很多你不知道的非常有用的函數(shù)。我強烈推薦至少閱讀一遍 Model 類的參考手冊。下面是以前我沒注意到的幾個重要函數(shù):
① generateList()
- 主要用于生成選擇框(
再次強烈推薦閱讀整個model類參考,你會為你學(xué)到的東西贊嘆的。
如何正確插入多行
我需要遍歷一個列表,并將其中的每個元素都插入到數(shù)據(jù)庫中。我發(fā)現(xiàn)如果在一次插入完成后立即進(jìn)行下一次插入,那么第二次插入的內(nèi)容完全不會被插入,而是會被更新到第一次插入的行中。例如:
$items = array('Item 1','Item 2','Item 3'); foreach ($items as $item) { $this->Post->save(array('Post' => array('title' => $item))); }
這段代碼將在posts表中插入僅一行:“Item 3”。CakePHP首先插入“Item 1”,但馬上將其更新為“Item 2”,再更新為“Item 3”,因為$this->Post->id保存的是上一次插入成功的行的id。通常這個特性很有用,但在這個例子中反而幫了倒忙。其實只要在每次插入之后設(shè)置 $this->Post->id = false 就可以解決這個問題。
更新:有人發(fā)郵件告訴我,正確的做法是調(diào)用create()初始化model,再set/save新數(shù)據(jù)。
在controller函數(shù)之前或之后插入邏輯
假設(shè)你需要在controller渲染的每個view中都設(shè)置一個顏色數(shù)組,但你不希望在每個action中都定義它??梢酝ㄟ^ beforeRender() 回調(diào)函數(shù)來實現(xiàn):
function beforeRender() { $this->set('colors',array('red','blue','green'); }
這樣該controller渲染的所有view都可以訪問$colors變量。beforeRender()函數(shù)在controller邏輯結(jié)束后、view被渲染之前執(zhí)行。同樣,beforeFilter()和afterFilter()函數(shù)會在每個controller action執(zhí)行的前后執(zhí)行。更多信息請閱讀手冊的models一節(jié)。
為CakePHP添加所見即所得編輯器
這里有一篇非常好的教程教你如何在CakePHP中使用TinyMCE。基本上你只需在頁面上鏈接tiny_mce.js文件,然后添加一些初始化代碼以設(shè)置將哪個textarea變成TinyMCE編輯器即可。
自定義HABTM關(guān)系的SQL語句
我曾試圖在自定義的SQL語句上定義一個HABTM關(guān)系(has-and-belongs-to-many),卻遇到了問題。根據(jù)本文撰稿時的文檔,應(yīng)當(dāng)先在自己的model中設(shè)置finderSql,但從CakePHP的源代碼來看,應(yīng)該設(shè)置finderQuery。這只是文檔中的一個小問題,但指出問題卻能為他人節(jié)約時間。Trac ticket在這里。
發(fā)送郵件
我在wiki中找到兩篇教程:發(fā)送郵件和通過PHPMailer發(fā)送郵件。強烈推薦后者,通過PHPMailer發(fā)送郵件更安全,而且不需要自己處理郵件頭,減少許多麻煩。
自定義Helper生成的HTML
我需要修改調(diào)用$html->selectTag()時生成的
建立 /app/config/tags.ini.php,然后添加以下的內(nèi)容:
; Tag template for a input type='radio' tag. radio = "<input type="radio" name="data[%s][%s]" id="%s" %s /><label for="%3$s">%s</label>" ; Tag template for an empty select option tag. selectempty = "<option value="" %s>-- Please Select --</option>"
你可以從/cake/config/tags.ini.php中獲得完整的標(biāo)簽列表。但我不建議修改該文件,否則升級CakePHP時可能會讓你的修改丟失。
自定義404頁面
如果你需要自定義404頁面,只需創(chuàng)建 /app/views/errors/error404.thtml。
更多cakephp知識點匯總相關(guān)文章請關(guān)注PHP中文網(wǎng)!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

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

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

Clothoff.io
Dissolvant de vêtements AI

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
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Sujets chauds

Pour fusionner deux tableaux PHP et conserver des valeurs uniques, il existe deux méthodes principales. 1. Pour les réseaux d'index ou uniquement la déduplication, utilisez Array_merge et Array_Unique Combinaisons: First Merge Array_merge ($ array1, $ array2), puis utilisez Array_Unique () pour les dédupliquer pour enfin obtenir un nouveau tableau contenant toutes les valeurs uniques; 2. Pour les tableaux associatifs et souhaitez conserver les paires de valeurs clés dans le premier tableau, utilisez l'opérateur: $ result = $ array1 $ array2, ce qui garantira que les clés du premier tableau ne seront pas écrasées par le deuxième tableau. Ces deux méthodes s'appliquent à des scénarios différents, selon que le nom de clé est conservé ou que l'accent est mis sur

Pour déterminer la force du mot de passe, il est nécessaire de combiner un traitement régulier et logique. Les exigences de base comprennent: 1. La longueur n'est pas moins de 8 chiffres; 2. Au moins contenant des lettres minuscules, des lettres majuscules et des chiffres; 3. Des restrictions de caractère spéciales peuvent être ajoutées; En termes d'aspects avancés, la duplication continue des caractères et des séquences incrémentielles / décroissantes doivent être évitées, ce qui nécessite une détection de fonction PHP; Dans le même temps, les listes noires doivent être introduites pour filtrer les mots de passe faibles communs tels que le mot de passe et 123456; Enfin, il est recommandé de combiner la bibliothèque ZXCVBN afin d'améliorer la précision d'évaluation.

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.

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.

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.

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.

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

Il existe deux fa?ons de créer un tableau en PHP: utilisez la fonction Array () ou utilisez des supports []. 1. L'utilisation de la fonction Array () est une manière traditionnelle, avec une bonne compatibilité. Définir des tableaux d'index tels que $ fruits = array ("Apple", "banana", "orange") et des tableaux associatifs tels que $ user = array ("name" => "John", "age" => 25); 2. L'utilisation de [] est un moyen plus simple de prendre en charge depuis PHP5.4, comme $ couleur
