Zusammenfassung der Cakephp-Wissenspunkte

高洛峰
Freigeben: 2023-03-06 07:04:01
Original
1187 Leute haben es durchsucht

Die Beispiele in diesem Artikel fassen allgemeine Wissenspunkte über Cakephp zusammen. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

1 Rufen Sie die Vorlage anderer Controller auf und leiten Sie um

Methode 1:

Hier das hello.ctp-Template unter /views/tasks/tasks aufrufen

$this -> viewPath = 'tasks';
$this -> render('hello');
Nach dem Login kopieren

Methode 2 (mit Parametern):

$this->redirect(array('controller'=>'users','action'=>'welcome',urlencode($this->data['name'].'haha')) );

2. Um

direkt abzufragen, verwenden Sie die Parameter von 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'),
  )
);
Nach dem Login kopieren

findDer erste Parameter kann „all“, „first“ und „count“ sein, und der zweite Parameter ist ein Array. Der Schlüssel des Arrays kann sein: Bedingungen, Felder, Reihenfolge, Limit, Offset und Joins.

Hinzugefügt:

$this->clue->create();
$this->clue->save($this->data);
Nach dem Login kopieren
Nach dem Login kopieren

Geändert:

$this->clue->create();
$this->clue->save($this->data);
Nach dem Login kopieren
Nach dem Login kopieren

Löschen:

$this->clue->delete($id)
Nach dem Login kopieren

3. Wenn öffentliche Stile nicht benötigt werden

$this->layout = false;
Nach dem Login kopieren

Es muss keine Ansicht gerendert werden

$this->autoRender = false;
Nach dem Login kopieren

Definieren Sie öffentliche Methoden/Klassen

Methode 1:

Sie können eine öffentliche Methode in /app/Controller/AppController.php definieren

Aufruf

$this->test();
Nach dem Login kopieren

Methode 2:

UtillComponent.php in /app/controllers/components erstellen

<?php
  class UtillComponent extends Object
  {
   function juanstr ($str) {
     return $str.&#39;+juanstr&#39;;
   }
  }
?>
Nach dem Login kopieren

Aufruf :

var $components = array(&#39;Utill&#39;);
$digit1 = $this->Utill->juanstr($digit1);
Nach dem Login kopieren

5. Definieren Sie eine Aufforderungsnachricht

$this->Session->setFlash(__(&#39;The user has been saved&#39;));

<p class="wrong"><?php echo $this->Session->flash();?></p>
Nach dem Login kopieren

oder

$this->Session->write(&#39;Message.auth&#39;,array(&#39;message&#39;=>__(&#39;The user has been saved.&#39;,true),&#39;element&#39;=>&#39;&#39;,&#39;params&#39;=>array()));

<p class="wrong"><?php echo $this->Session->flash(&#39;auth&#39;);?></p>
Nach dem Login kopieren

6. Sitzungseinstellungen

finden Sie unter: http:/ /www.php.cn/

check(string $name);

Überprüfen Sie, ob in der Sitzung bereits ein Datenelement mit $name als Schlüsselwert vorhanden ist.

del(string $name); <code>del(string $name);<br/>delete(string $name);delete(string $name);

Löschen Sie die durch $name angegebene Sitzungsvariable.

valid gibt true zurück, wenn die Sitzung gültig ist. Am besten verwenden Sie es vor der read()-Operation, um festzustellen, ob die Sitzung, auf die Sie zugreifen möchten, tatsächlich gültig ist.

read(string $name);

Gibt den Wert der Variablen $name zurück.

erneuern

Aktualisieren Sie die Informationen in der ursprünglichen Sitzung auf die neue Sitzung, indem Sie eine neue Sitzungs-ID erstellen und die ursprüngliche ID löschen.

write(string $name, mixed $value);

Variablen $name, $value in die Sitzung schreiben

Fehler

Gibt den zuletzt von der Cake Session-Komponente generierten Fehler zurück. Wird häufig zum Debuggen verwendet.

7. Formular

<?php echo $this->Form->create(&#39;Subject&#39;,array(
  &#39;type&#39; => &#39;post&#39;,
  &#39;inputDefaults&#39;=>array(
    &#39;p&#39;=>false,
    &#39;label&#39;=>false
    ),
  &#39;url&#39;=>array(
      &#39;controller&#39;=>&#39;subjects&#39;,
      &#39;action&#39;=>&#39;edit&#39;
    ),
  &#39;onsubmit&#39;=>&#39;return validateCallback(this, dialogAjaxDone);&#39; //提交前验证
  )
);
echo $this->Form->input(&#39;id&#39;,array(&#39;type&#39;=>&#39;hidden&#39;));
echo $this->Form->input(&#39;uid&#39;,array(&#39;type&#39;=>&#39;hidden&#39;));
?>
<ul class="usr_info_basic">
<li>
  <p class="ti">下拉单选(编辑页面会自动判断选中)</p>
  <p class="ce">
<?php echo $this->Form->input(&#39;type&#39;,array(&#39;type&#39;=>&#39;select&#39; ,&#39;class&#39;=>&#39;ipt&#39;,&#39;options&#39; => array(0=>&#39;文章&#39;,1=>&#39;专题&#39;, 2=>&#39;图组&#39;)));?>
  </p>
</li>
<li>
  <p class="ti">多选</p>
  <p class="ce">
<?php
  echo $this->Form->input(&#39;pushtype&#39;, array(&#39;type&#39;=>&#39;select&#39;,
    &#39;options&#39; => $pushtype,//所有选项
    &#39;multiple&#39;=>&#39;checkbox&#39;,
    &#39;selected&#39; => $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();?>
Nach dem Login kopieren

8. ;

Direkt im Controller aufrufen:

$this->log(&#39;Something brok2&#39;,LOG_DEBUG);
Nach dem Login kopieren

oder in der Ansicht aufrufen:

Nach dem Login kopieren

Die Arten von Protokollen sind ungefähr wie folgt:

$levels = array(
  LOG_WARNING=> &#39;warning&#39;,
  LOG_NOTICE=> &#39;notice&#39;,
  LOG_INFO=> &#39;info&#39;,
  LOG_DEBUG=> &#39;debug&#39;,
  LOG_ERR=> &#39;error&#39;,
  LOG_ERROR=> &#39;error&#39;
);
Nach dem Login kopieren

Protokolldateien werden in / gespeichert. app/tmp/logs-Verzeichnis.

Es gibt Protokollkonfigurationsoptionen in der Datei /app/config/core.php:

define(&#39;LOG_ERROR&#39;, 2);
Nach dem Login kopieren

9. Rendering Pfad

echo APP . &#39;webroot&#39; . DS;
//D:\wamp\www\cakephp\app\webroot\
echo APP . &#39;webroot&#39; ;
D:\wamp\www\cakephp\app\webroot
Nach dem Login kopieren

Anhang: 21 Tipps, die Sie über CakePHP wissen müssen

Dieser Artikel kann es gilt als das klassischste unter den CakePHP-Tutorials. Obwohl es sich nicht um eine vollständige Schritt-für-Schritt-Reihe handelt, hat der Autor seine eigenen Erfahrungen im Umgang mit CakePHP in 21 Artikeln zusammengefasst, die insbesondere für Anfänger sehr nützlich sind.

Während der Übersetzung wurden einige für CakePHP einzigartige Wörter absichtlich unübersetzt gelassen, wie z. B. Controller, Modell usw. Ich glaube, dass Menschen, die CakePHP gelernt haben, in der Lage sein sollten, die Bedeutung sofort zu verstehen.

Außerdem ist das Wiki von CakePHP abgelaufen und wurde durch eine Website namens Bakery ersetzt. Auch die im Originalartikel zitierten Links zum Wiki wurden auf die Bäckerei aktualisiert.

Schnell statische Seiten erstellen

Ich möchte mehrere Seiten erstellen, die nur statische Daten enthalten, das Standardlayout verwenden und kein Modell erfordern. Zunächst habe ich versucht, einen Controller zu erstellen und für jede statische Seite eine Aktion zu definieren. Diese Methode ist jedoch umständlich und nicht für die schnelle Erstellung statischer Seiten geeignet.

Tatsächlich können Sie dies auch mit dem Seiten-Controller tun – erstellen Sie einfach eine Ansicht im Ordner „views/pages“ und greifen Sie über „/pages“ darauf zu. Ich habe beispielsweise /views/pages/matt.thtml erstellt, auf das über http://www.php.cn/ zugegriffen werden kann.

Ändern Sie den Titel der statischen Seite

Wenn Sie den Seitentitel ändern möchten, wenn Sie den Seiten-Controller verwenden, fügen Sie einfach den folgenden Code zur Ansicht hinzu:

<? $this->pageTitle = &#39;Title of your page.&#39;; ?>
Nach dem Login kopieren

Daten in einer statischen Seite an Layout senden

Wenn Sie Daten an Layout übergeben müssen (z. B , der angibt, welcher Teil der Navigationsleiste hervorgehoben werden soll (Angezeigte Variablen), können Sie der Ansicht den folgenden Code hinzufügen:

<? $this->_viewVars[&#39;somedata&#39;] = array(&#39;some&#39;,&#39;data&#39;); ?>
Nach dem Login kopieren

Dieses Array kann sein Zugriff über $somedata im Layout.

Hintergrundverwaltung schnell erstellen

Wenn Sie ein Hintergrundverwaltungsprogramm erstellen müssen und möchten, dass sich alle Verwaltungsaktionen in einem bestimmten Ordner befinden, öffnen Sie config/core. php und entfernen Sie die Kommentare aus der folgenden Zeile:

define(&#39;CAKE_ADMIN&#39;, &#39;admin&#39;);
Nach dem Login kopieren

这样所有以"admin_"开头的action都可以通过 /admin/yourcontroller/youraction 来访问。例如,如果在posts controller中创建了名为"admin_add"的action,那么可以通过 www.example.com/admin/posts/add 访问这个action。这样就可以方便地为admin目录设置密码以避免他人随意访问。

查看后台执行的SQL语句

只需改变config/core.php中的DEBUG常量,即可看到后台执行的SQL语句。0为产品级,1为开发级,2为完整调试SQL,3为完整调试SQL并显示对象数据。我通常将DEBUG设置为2,这样每页的底部会显示出一个包含SQL调试信息的表格。

如果页面底部添加的表格会破坏页面布局(特别是使用Ajax获取页面并显示到页面中间而不是底部时),你可以在CSS中添加以下代码以隐藏调试信息:

#cakeSqlLog { display: none; }
Nach dem Login kopieren

这样既能保持页面布局,又可以通过查看源代码来看到调试信息。当然最后发布网站时别忘了将调试级别改回0。

获取丰富的开发文档

别总是盯着手册。wiki和API也是无价之宝。wiki中的开发指南十分有用,而API文档初看起来比较难,但你很快就会发现这里的信息对你创建CakePHP网站十分重要。

使用bake.php

Bake是个命令行PHP脚本,可以根据数据库自动生成model、controller和view。在开发的最初阶段,我强烈推荐使用scaffolding让你的原型程序跑起来。但如果你清楚地知道scaffolding不合适,我推荐你使用bake。bake会生成所有的文件并保存到磁盘上,以便你随意修改。这样能节省创建关联、view、基本的CRUD crollder操作的重复工作。

(译者注:CRUD - Create, Read, Update, Delete,数据库应用的四种基本操作,即"增删查改"。)

bake很方便。你只需在数据库中建立一个表,然后到 /cake/scripts/ 目录下执行php bake.php 即可。

如果你通过交互方式来运行bake,它会分几步提示你创建model、controller和view。创建结束之后,我通常会阅读所有生成的代码并做必要的修改。

发布程序时注意权限

有一次我在发布程序时,将整个cake目录打包然后用scp上传到了服务器上。只要一关闭调试信息,就会出现错误——数据库调用无法返回任何数据。我一筹莫展,因为我必须通过调试信息才能调试问题。后来有人告诉我,/app/tmp应当对apache可写。将权限改为777之后问题就解决了。

复杂model验证

我需要进行更复杂的验证,而不仅仅是验证输入框非空或者符合某个正则表达式这样的简单验证。例如,我要验证用户注册时使用的邮件地址是否已被使用。在wiki中我找到了这篇关于高级验证的文章,其中提到了一些十分有用的高级验证方法。

记录错误日志

$this->log(&#39;Something broke&#39;);
Nach dem Login kopieren

这样可以将错误记录到 /tmp/logs/ 中(我最初以为会记录到apache的错误日志中)。

让controller使用其他model

如果你的controller需要调用来自不同model的数据,只要在controller开头使用如下代码:

class yourController extends AppController {
 var $uses = array(&#39;Post&#39;,&#39;User&#39;);
}
Nach dem Login kopieren

这样controller就能访问Post和User model了。

创建不使用数据库表的model

我需要创建一个不使用任何表的model。例如,我想通过$validate数组方便底验证输入数据,保持model逻辑的正确性。但创建model时对应的表不存在,CakePHP就会报错。通过在model中加入以下代码可以解决这个问题:

var $useTable = false;
Nach dem Login kopieren

你也可以通过这种方法改变model对应的表名。

var $useTable = &#39;some_table&#39;;
Nach dem Login kopieren

重定向之后记得exit()

对于有经验的人来说这应当是理所当然的事儿,调用 $this->redirect() 之后,剩下的代码如果不想运行要exit()。我也这样做,但以前曾经认为 $this->redirect() 会为我调用exit(实际上不会)。

高级model函数

翻翻API就能发现很多你不知道的非常有用的函数。我强烈推荐至少阅读一遍 Model 类的参考手册。下面是以前我没注意到的几个重要函数:

generateList() - 主要用于生成选择框(