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

首頁(yè) 後端開發(fā) php教程 cakephp知識(shí)點(diǎn)總結(jié)

cakephp知識(shí)點(diǎn)總結(jié)

Feb 25, 2017 pm 04:20 PM

本文實(shí)例總結(jié)了cakephp常見知識(shí)點(diǎn)。分享給大家參考,具體如下:

1. 呼叫其他控制器的模板,重定向

方法一:

在此呼叫/views/tasks/tasks下的hello.ctp模板

$this -> viewPath = 'tasks';
$this -> render('hello');

方法二(帶參):

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

2. 查詢

直接使用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的參數(shù),第一個(gè)可以是all、first、count,第二個(gè)參數(shù)為一數(shù)組,數(shù)組的key可以是:conditions、fields、order、limit、offset、joins。

新增:

$this->clue->create();
$this->clue->save($this->data);

修改:

$this->clue->create();
$this->clue->save($this->data);

刪除:

$this->clue->delete($id)

3. 不需要公共樣式時(shí)

$this->layout = false;

不用渲染任何view

$this->autoRender = false;

4.定義公共的方法/類別

##方法一:

可以在/app/Controller/AppController.php中定義公共的方法

呼叫

#
$this->test();

方法二:

在/app/controllers/components中建立UtillComponent.php

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

##呼叫:

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

5.定義提示訊息

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

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

##
$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>

6. session設(shè)定

可參考:http://m.miracleart.cn/

check(string $name);

檢查Session中是否已有$name為鍵值的資料項(xiàng)目.<br/>#del(string $name);

delete(string $name);

刪除$name 指定的Session 變數(shù)。

valid當(dāng)Session有效時(shí)回傳true,最好在read()操作前用它來決定你要存取的會(huì)話是否確實(shí)有效.

read(string $name) ;

傳回$name 變數(shù)值。

renew

透過建立新的seesion ID,刪除原有的ID,將原有Session中資訊更新到新的Session中。

write(string $name, mixed $value);

#將變數(shù)$name,$value寫入會(huì)話.

error

傳回最近由Cake Session Component 產(chǎn)生的錯(cuò)誤,常用於偵錯(cuò)。

7. 表單

<?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; //提交前驗(yàn)證
  )
);
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">下拉單選(編輯頁(yè)面會(huì)自動(dòng)判斷選中)</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,//所有選項(xiàng)
    &#39;multiple&#39;=>&#39;checkbox&#39;,
    &#39;selected&#39; => $pushtypes,//選中的項(xiàng)
));
?>
  </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. 日誌$this->log();

在controller直接呼叫:

$this->log(&#39;Something brok2&#39;,LOG_DEBUG);

#或view裡呼叫:

日誌的類型大致上有以下幾種:

$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;
);

#日誌檔案都保存在/app/tmp/logs目錄。

在/app/config/core.php檔案中有日誌的設(shè)定選項(xiàng):

#
define(&#39;LOG_ERROR&#39;, 2);

9.渲染路徑

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

附:CakePHP必知的21個(gè)技巧

這篇文章可以說是CakePHP教學(xué)中最經(jīng)典的了。雖然不是完整的手把手系列,但作者將自己使用CakePHP的經(jīng)驗(yàn)總結(jié)了21條,這些尤其是對(duì)新手十分有用。

翻譯時(shí)故意保留了一些CakePHP中特有的字沒有翻譯,如controller、model等。相信學(xué)過CakePHP的人應(yīng)該馬上就能理解它們的意思吧。

另外,CakePHP的wiki已經(jīng)失效,取而代之的是一個(gè)名為bakery的網(wǎng)站。原文中引用的wiki的連結(jié)也都已更新到了bakery上。

快速建立靜態(tài)頁(yè)面

我想建立幾個(gè)頁(yè)面,它們只包含靜態(tài)數(shù)據(jù),使用預(yù)設(shè)layout,不需要任何model。最初我試圖創(chuàng)建一個(gè)controller並為每個(gè)靜態(tài)頁(yè)面定義一個(gè)action。但這種方法很笨拙,也不適合快速建立靜態(tài)頁(yè)面。

實(shí)際上只要使用pages controller就可以做到——只要在 views/pages 資料夾下建立一個(gè)view,就可以透過 /pages 來存取。例如,我創(chuàng)建了 /views/pages/matt.thtml ,就可以透過http://m.miracleart.cn/ 來存取。

改變靜態(tài)頁(yè)面的標(biāo)題

使用pages controller時(shí)如果想改變頁(yè)面標(biāo)題,只需在view中加入以下程式碼:

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

在靜態(tài)頁(yè)面中向layout發(fā)送資料

#如果需要向layout傳遞資料(例如表示導(dǎo)覽列中哪個(gè)部分應(yīng)該會(huì)高亮顯示的變數(shù)),可以在view中加入下面的程式碼:

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

#這個(gè)陣列就可以在layout中透過$somedata來存取。

快速建立後臺(tái)管理

如果你需要建立後臺(tái)管理程序,並且希望所有管理action都位於某個(gè)特定資料夾下,那麼開啟config/core. php 並將下面這一行的註解去掉:

define(&#39;CAKE_ADMIN&#39;, &#39;admin&#39;);
######

這樣所有以"admin_"開頭的action都可以通過 /admin/yourcontroller/youraction 來訪問。例如,如果在posts controller中創(chuàng)建了名為"admin_add"的action,那么可以通過 www.example.com/admin/posts/add 訪問這個(gè)action。這樣就可以方便地為admin目錄設(shè)置密碼以避免他人隨意訪問。

查看后臺(tái)執(zhí)行的SQL語(yǔ)句

只需改變config/core.php中的DEBUG常量,即可看到后臺(tái)執(zhí)行的SQL語(yǔ)句。0為產(chǎn)品級(jí),1為開發(fā)級(jí),2為完整調(diào)試SQL,3為完整調(diào)試SQL并顯示對(duì)象數(shù)據(jù)。我通常將DEBUG設(shè)置為2,這樣每頁(yè)的底部會(huì)顯示出一個(gè)包含SQL調(diào)試信息的表格。

如果頁(yè)面底部添加的表格會(huì)破壞頁(yè)面布局(特別是使用Ajax獲取頁(yè)面并顯示到頁(yè)面中間而不是底部時(shí)),你可以在CSS中添加以下代碼以隱藏調(diào)試信息:

#cakeSqlLog { display: none; }

這樣既能保持頁(yè)面布局,又可以通過查看源代碼來看到調(diào)試信息。當(dāng)然最后發(fā)布網(wǎng)站時(shí)別忘了將調(diào)試級(jí)別改回0。

獲取豐富的開發(fā)文檔

別總是盯著手冊(cè)。wiki和API也是無價(jià)之寶。wiki中的開發(fā)指南十分有用,而API文檔初看起來比較難,但你很快就會(huì)發(fā)現(xiàn)這里的信息對(duì)你創(chuàng)建CakePHP網(wǎng)站十分重要。

使用bake.php

Bake是個(gè)命令行PHP腳本,可以根據(jù)數(shù)據(jù)庫(kù)自動(dòng)生成model、controller和view。在開發(fā)的最初階段,我強(qiáng)烈推薦使用scaffolding讓你的原型程序跑起來。但如果你清楚地知道scaffolding不合適,我推薦你使用bake。bake會(huì)生成所有的文件并保存到磁盤上,以便你隨意修改。這樣能節(jié)省創(chuàng)建關(guān)聯(lián)、view、基本的CRUD crollder操作的重復(fù)工作。

(譯者注:CRUD - Create, Read, Update, Delete,數(shù)據(jù)庫(kù)應(yīng)用的四種基本操作,即"增刪查改"。)

bake很方便。你只需在數(shù)據(jù)庫(kù)中建立一個(gè)表,然后到 /cake/scripts/ 目錄下執(zhí)行php bake.php 即可。

如果你通過交互方式來運(yùn)行bake,它會(huì)分幾步提示你創(chuàng)建model、controller和view。創(chuàng)建結(jié)束之后,我通常會(huì)閱讀所有生成的代碼并做必要的修改。

發(fā)布程序時(shí)注意權(quán)限

有一次我在發(fā)布程序時(shí),將整個(gè)cake目錄打包然后用scp上傳到了服務(wù)器上。只要一關(guān)閉調(diào)試信息,就會(huì)出現(xiàn)錯(cuò)誤——數(shù)據(jù)庫(kù)調(diào)用無法返回任何數(shù)據(jù)。我一籌莫展,因?yàn)槲冶仨毻ㄟ^調(diào)試信息才能調(diào)試問題。后來有人告訴我,/app/tmp應(yīng)當(dāng)對(duì)apache可寫。將權(quán)限改為777之后問題就解決了。

復(fù)雜model驗(yàn)證

我需要進(jìn)行更復(fù)雜的驗(yàn)證,而不僅僅是驗(yàn)證輸入框非空或者符合某個(gè)正則表達(dá)式這樣的簡(jiǎn)單驗(yàn)證。例如,我要驗(yàn)證用戶注冊(cè)時(shí)使用的郵件地址是否已被使用。在wiki中我找到了這篇關(guān)于高級(jí)驗(yàn)證的文章,其中提到了一些十分有用的高級(jí)驗(yàn)證方法。

記錄錯(cuò)誤日志

$this->log(&#39;Something broke&#39;);

這樣可以將錯(cuò)誤記錄到 /tmp/logs/ 中(我最初以為會(huì)記錄到apache的錯(cuò)誤日志中)。

讓controller使用其他model

如果你的controller需要調(diào)用來自不同model的數(shù)據(jù),只要在controller開頭使用如下代碼:

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

這樣controller就能訪問Post和User model了。

創(chuàng)建不使用數(shù)據(jù)庫(kù)表的model

我需要?jiǎng)?chuàng)建一個(gè)不使用任何表的model。例如,我想通過$validate數(shù)組方便底驗(yàn)證輸入數(shù)據(jù),保持model邏輯的正確性。但創(chuàng)建model時(shí)對(duì)應(yīng)的表不存在,CakePHP就會(huì)報(bào)錯(cuò)。通過在model中加入以下代碼可以解決這個(gè)問題:

var $useTable = false;

你也可以通過這種方法改變model對(duì)應(yīng)的表名。

var $useTable = &#39;some_table&#39;;

重定向之后記得exit()

對(duì)于有經(jīng)驗(yàn)的人來說這應(yīng)當(dāng)是理所當(dāng)然的事兒,調(diào)用 $this->redirect() 之后,剩下的代碼如果不想運(yùn)行要exit()。我也這樣做,但以前曾經(jīng)認(rèn)為 $this->redirect() 會(huì)為我調(diào)用exit(實(shí)際上不會(huì))。

高級(jí)model函數(shù)

翻翻API就能發(fā)現(xiàn)很多你不知道的非常有用的函數(shù)。我強(qiáng)烈推薦至少閱讀一遍 Model 類的參考手冊(cè)。下面是以前我沒注意到的幾個(gè)重要函數(shù):

generateList() - 主要用于生成選擇框(