《PHP編程:cakephp常見知識(shí)點(diǎn)匯總》要點(diǎn):
本文介紹了PHP編程:cakephp常見知識(shí)點(diǎn)匯總,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
PHP實(shí)例本文實(shí)例總結(jié)了cakephp常見知識(shí)點(diǎn).分享給大家供大家參考,具體如下:
PHP實(shí)例1. 調(diào)用其他控制器的模板,重定向
PHP實(shí)例方法一:
PHP實(shí)例在此調(diào)用/views/tasks/tasks下的hello.ctp模板
PHP實(shí)例
$this -> viewPath = 'tasks';
$this -> render('hello');
PHP實(shí)例方法二(帶參):
PHP實(shí)例$this->redirect(array('controller'=>'users','action'=>'welcome',urlencode($this->data['姓名'].'haha')));
PHP實(shí)例2. 查詢
PHP實(shí)例直接使用sql:
PHP實(shí)例
$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'),
)
);
PHP實(shí)例find的參數(shù),第一個(gè)可以是all、first、count,第二個(gè)參數(shù)為一數(shù)組,數(shù)組的key可以是:conditions、fields、order、limit、offset、joins.
PHP實(shí)例添加:
PHP實(shí)例
$this->clue->create();
$this->clue->save($this->data);
PHP實(shí)例修改:
PHP實(shí)例
$this->clue->create();
$this->clue->save($this->data);
PHP實(shí)例刪除:
PHP實(shí)例
$this->clue->delete($id)
PHP實(shí)例3. 不需要公共樣式時(shí)
PHP實(shí)例
$this->layout = false;
PHP實(shí)例不用渲染任何view
PHP實(shí)例
$this->autoRender = false;
PHP實(shí)例4. 定義公共的方法/類
PHP實(shí)例方法一:
PHP實(shí)例可以在/app/Controller/AppController.php中定義公共的方法
PHP實(shí)例調(diào)用
PHP實(shí)例
$this->test();
PHP實(shí)例方法二:
PHP實(shí)例在/app/controllers/components中創(chuàng)建UtillComponent.php
PHP實(shí)例
<?php
class UtillComponent extends Object
{
function juanstr ($str) {
return $str.'+juanstr';
}
}
?>
PHP實(shí)例調(diào)用:
PHP實(shí)例
var $components = array('Utill');
$digit1 = $this->Utill->juanstr($digit1);
PHP實(shí)例5. 定義提示信息
PHP實(shí)例
$this->Session->setFlash(__('The user has been saved'));
<p class="wrong"><?php echo $this->Session->flash();?></p>
PHP實(shí)例或者
PHP實(shí)例
$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>
PHP實(shí)例6. session設(shè)置
PHP實(shí)例可參考:/article/106557.htm
PHP實(shí)例check(string $name);
PHP實(shí)例檢查Session中是否已有$name為鍵值的數(shù)據(jù)項(xiàng).
PHP實(shí)例del(string $name);
delete(string $name);
PHP實(shí)例刪除$name 指定的 Session 變量.
PHP實(shí)例valid當(dāng)Session有效時(shí)返回true,最好在read()操作前用它來確定你要訪問的會(huì)話是否確實(shí)有效.
PHP實(shí)例read(string $name);
PHP實(shí)例返回 $name 變量值.
PHP實(shí)例renew
PHP實(shí)例通過創(chuàng)建新的seesion ID,刪除原有的ID,將原有Session中信息更新到新的Session中.
PHP實(shí)例write(string $name, mixed $value);
PHP實(shí)例將變量 $name,$value寫入會(huì)話.
PHP實(shí)例error
PHP實(shí)例返回最近由 Cake Session Component 產(chǎn)生的錯(cuò)誤,常用于調(diào)試.
PHP實(shí)例7. 表單
PHP實(shí)例
<?php echo $this->Form->create('Subject',array(
'type' => 'post',
'inputDefaults'=>array(
'div'=>false,
'label'=>false
),
'url'=>array(
'controller'=>'subjects',
'action'=>'edit'
),
'onsubmit'=>'return validateCallback(this, dialogAjaxDone);' //提交前驗(yàn)證
)
);
echo $this->Form->input('id',array('type'=>'hidden'));
echo $this->Form->input('uid',array('type'=>'hidden'));
?>
<ul class="usr_info_basic">
<li>
<div class="ti">下拉單選(編輯頁面會(huì)自動(dòng)判斷選中)</div>
<div class="ce">
<?php echo $this->Form->input('type',array('type'=>'select' ,'class'=>'ipt','options' => array(0=>'文章',1=>'專題', 2=>'圖組')));?>
</div>
</li>
<li>
<div class="ti">多選</div>
<div class="ce">
<?php
echo $this->Form->input('pushtype', array('type'=>'select',
'options' => $pushtype,//所有選項(xiàng)
'multiple'=>'checkbox',
'selected' => $pushtypes,//選中的項(xiàng)
));
?>
</div>
</li>
</ul>
<div class="btns_3">
<button class="btn3" type="submit"><span>保存</span></button>
<button class="btn3 btn3_1 close"><span>取消</span></button>
</div>
<?php echo $this->Form->end();?>
PHP實(shí)例8. 日志$this->log();
PHP實(shí)例在controller直接調(diào)用:
PHP實(shí)例
$this->log('Something brok2',LOG_DEBUG);
PHP實(shí)例或view里調(diào)用:
PHP實(shí)例
<?php $this->log('Something brok2',LOG_DEBUG); ?>
PHP實(shí)例日志的類型大致有以下幾種:
PHP實(shí)例
$levels = array(
LOG_WARNING=> 'warning',
LOG_NOTICE=> 'notice',
LOG_INFO=> 'info',
LOG_DEBUG=> 'debug',
LOG_ERR=> 'error',
LOG_ERROR=> 'error'
);
PHP實(shí)例日志文件都保存在/app/tmp/logs目錄.
PHP實(shí)例在/app/config/core.php文件中有日志的配置選項(xiàng):
PHP實(shí)例
define('LOG_ERROR', 2);
PHP實(shí)例9. 渲染路徑
PHP實(shí)例
echo APP . 'webroot' . DS;
//D:\wamp\www\cakephp\app\webroot\
echo APP . 'webroot' ;
D:\wamp\www\cakephp\app\webroot
PHP實(shí)例附:CakePHP必知的21條技巧
PHP實(shí)例這篇文章可以說是CakePHP教程中最經(jīng)典的了.雖然不是完整的手把手系列,但作者將自己使用CakePHP的經(jīng)驗(yàn)總結(jié)了21條,這些尤其是對(duì)新手十分有用.
PHP實(shí)例翻譯時(shí)故意保留了一些CakePHP中特有的詞語沒有翻譯,如controller、model等.相信學(xué)過CakePHP的人應(yīng)該馬上就能理解它們的意思吧.
PHP實(shí)例另外,CakePHP的wiki已經(jīng)失效,取而代之的是一個(gè)名為bakery的網(wǎng)站.原文中引用的wiki的鏈接也都已更新到了bakery上.
PHP實(shí)例快速創(chuàng)建靜態(tài)頁面
PHP實(shí)例我想建立幾個(gè)頁面,它們僅包含靜態(tài)數(shù)據(jù),使用默認(rèn)layout,不需要任何model.最初我試圖創(chuàng)建一個(gè)controller并為每個(gè)靜態(tài)頁面定義一個(gè)action.但這種方法很笨拙,也不適合快速創(chuàng)建靜態(tài)頁面.
PHP實(shí)例實(shí)際上只要使用pages controller就可以做到――只要在 views/pages 文件夾下創(chuàng)建一個(gè)view,就可以通過 /pages 來訪問.例如,我創(chuàng)建了 /views/pages/matt.thtml ,就可以通過http://www.example.com/pages/matt 來訪問.
PHP實(shí)例改變靜態(tài)頁面的標(biāo)題
PHP實(shí)例使用pages controller時(shí)如果想改變頁面標(biāo)題,只需在view中加入以下代碼:
PHP實(shí)例
<? $this->pageTitle = 'Title of your page.'; ?>
PHP實(shí)例在靜態(tài)頁面中向layout發(fā)送數(shù)據(jù)
PHP實(shí)例如果需要向layout傳遞數(shù)據(jù)(例如表示導(dǎo)航欄中哪個(gè)部分應(yīng)該高亮顯示的變量),可以在view中添加下面的代碼:
PHP實(shí)例
<? $this->_viewVars['somedata'] = array('some','data'); ?>
PHP實(shí)例這個(gè)數(shù)組就可以在layout中通過$somedata來訪問.
PHP實(shí)例快速創(chuàng)建后臺(tái)管理
PHP實(shí)例如果你需要?jiǎng)?chuàng)建后臺(tái)管理程序,并且希望所有管理action都位于某個(gè)特定文件夾下,那么打開 config/core.php 并將下面這一行的注釋去掉:
PHP實(shí)例
define('CAKE_ADMIN', 'admin');
PHP實(shí)例這樣所有以"admin_"開頭的action都可以通過 /admin/yourcontroller/youraction 來訪問.例如,如果在posts controller中創(chuàng)建了名為"admin_add"的action,那么可以通過 www.example.com/admin/posts/add 訪問這個(gè)action.這樣就可以方便地為admin目錄設(shè)置密碼以避免他人隨意訪問.
PHP實(shí)例查看后臺(tái)執(zhí)行的SQL語句
PHP實(shí)例只需改變config/core.php中的DEBUG常量,即可看到后臺(tái)執(zhí)行的SQL語句.0為產(chǎn)品級(jí),1為開發(fā)級(jí),2為完整調(diào)試SQL,3為完整調(diào)試SQL并顯示對(duì)象數(shù)據(jù).我通常將DEBUG設(shè)置為2,這樣每頁的底部會(huì)顯示出一個(gè)包含SQL調(diào)試信息的表格.
PHP實(shí)例如果頁面底部添加的表格會(huì)破壞頁面布局(特別是使用Ajax獲取頁面并顯示到頁面中間而不是底部時(shí)),你可以在CSS中添加以下代碼以隱藏調(diào)試信息:
PHP實(shí)例
#cakeSqlLog { display: none; }
PHP實(shí)例這樣既能保持頁面布局,又可以通過查看源代碼來看到調(diào)試信息.當(dāng)然最后發(fā)布網(wǎng)站時(shí)別忘了將調(diào)試級(jí)別改回0.
PHP實(shí)例獲取豐富的開發(fā)文檔
PHP實(shí)例別總是盯著手冊(cè).wiki和API也是無價(jià)之寶.wiki中的開發(fā)指南十分有用,而API文檔初看起來比較難,但你很快就會(huì)發(fā)現(xiàn)這里的信息對(duì)你創(chuàng)建CakePHP網(wǎng)站十分重要.
PHP實(shí)例使用bake.php
PHP實(shí)例Bake是個(gè)命令行PHP腳本,可以根據(jù)數(shù)據(jù)庫自動(dòng)生成model、controller和view.在開發(fā)的最初階段,我強(qiáng)烈推薦使用scaffolding讓你的原型程序跑起來.但如果你清楚地知道scaffolding不合適,我推薦你使用bake.bake會(huì)生成所有的文件并保存到磁盤上,以便你隨意修改.這樣能節(jié)省創(chuàng)建關(guān)聯(lián)、view、基本的CRUD crollder操作的重復(fù)工作.
PHP實(shí)例(譯者注:CRUD - Create, Read, Update, Delete,數(shù)據(jù)庫應(yīng)用的四種基本操作,即"增刪查改".)
PHP實(shí)例bake很方便.你只需在數(shù)據(jù)庫中建立一個(gè)表,然后到 /cake/scripts/ 目錄下執(zhí)行php bake.php 即可.
PHP實(shí)例如果你通過交互方式來運(yùn)行bake,它會(huì)分幾步提示你創(chuàng)建model、controller和view.創(chuàng)建結(jié)束之后,我通常會(huì)閱讀所有生成的代碼并做必要的修改.
PHP實(shí)例發(fā)布程序時(shí)注意權(quán)限
PHP實(shí)例有一次我在發(fā)布程序時(shí),將整個(gè)cake目錄打包然后用scp上傳到了服務(wù)器上.只要一關(guān)閉調(diào)試信息,就會(huì)出現(xiàn)錯(cuò)誤――數(shù)據(jù)庫調(diào)用無法返回任何數(shù)據(jù).我一籌莫展,因?yàn)槲冶仨毻ㄟ^調(diào)試信息才能調(diào)試問題.后來有人告訴我,/app/tmp應(yīng)當(dāng)對(duì)apache可寫.將權(quán)限改為777之后問題就解決了.
PHP實(shí)例復(fù)雜model驗(yàn)證
PHP實(shí)例我需要進(jìn)行更復(fù)雜的驗(yàn)證,而不僅僅是驗(yàn)證輸入框非空或者符合某個(gè)正則表達(dá)式這樣的簡單驗(yàn)證.例如,我要驗(yàn)證用戶注冊(cè)時(shí)使用的郵件地址是否已被使用.在wiki中我找到了這篇關(guān)于高級(jí)驗(yàn)證的文章,其中提到了一些十分有用的高級(jí)驗(yàn)證方法.
PHP實(shí)例記錄錯(cuò)誤日志
PHP實(shí)例
$this->log('Something broke');
PHP實(shí)例這樣可以將錯(cuò)誤記錄到 /tmp/logs/ 中(我最初以為會(huì)記錄到apache的錯(cuò)誤日志中).
PHP實(shí)例讓controller使用其他model
PHP實(shí)例如果你的controller需要調(diào)用來自不同model的數(shù)據(jù),只要在controller開頭使用如下代碼:
PHP實(shí)例
class yourController extends AppController {
var $uses = array('Post','User');
}
PHP實(shí)例這樣controller就能訪問Post和User model了.
PHP實(shí)例創(chuàng)建不使用數(shù)據(jù)庫表的model
PHP實(shí)例我需要?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è)問題:
PHP實(shí)例
var $useTable = false;
PHP實(shí)例你也可以通過這種方法改變model對(duì)應(yīng)的表名.
PHP實(shí)例
var $useTable = 'some_table';
PHP實(shí)例重定向之后記得exit()
PHP實(shí)例對(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ì)).
PHP實(shí)例高級(jí)model函數(shù)
PHP實(shí)例翻翻API就能發(fā)現(xiàn)很多你不知道的非常有用的函數(shù).我強(qiáng)烈推薦至少閱讀一遍 Model 類的參考手冊(cè).下面是以前我沒注意到的幾個(gè)重要函數(shù):
PHP實(shí)例① generateList()
- 主要用于生成選擇框(<SELECT>)所需的數(shù)據(jù)
② query()
- 自己寫SQL語句來查詢
③ findCount()
- 返回滿足指定條件的行數(shù)
④ hasAny()
- 當(dāng)有記錄滿足條件時(shí)返回真
PHP實(shí)例再次強(qiáng)烈推薦閱讀整個(gè)model類參考,你會(huì)為你學(xué)到的東西贊嘆的.
PHP實(shí)例如何正確插入多行
PHP實(shí)例我需要遍歷一個(gè)列表,并將其中的每個(gè)元素都插入到數(shù)據(jù)庫中.我發(fā)現(xiàn)如果在一次插入完成后立即進(jìn)行下一次插入,那么第二次插入的內(nèi)容完全不會(huì)被插入,而是會(huì)被更新到第一次插入的行中.例如:
PHP實(shí)例
$items = array('Item 1','Item 2','Item 3');
foreach ($items as $item) {
$this->Post->save(array('Post' => array('title' => $item)));
}
PHP實(shí)例這段代碼將在posts表中插入僅一行:“Item 3”.CakePHP首先插入“Item 1”,但馬上將其更新為“Item 2”,再更新為“Item 3”,因?yàn)?this->Post->id保存的是上一次插入成功的行的id.通常這個(gè)特性很有用,但在這個(gè)例子中反而幫了倒忙.其實(shí)只要在每次插入之后設(shè)置 $this->Post->id = false 就可以解決這個(gè)問題.
PHP實(shí)例更新:有人發(fā)郵件告訴我,正確的做法是調(diào)用create()初始化model,再set/save新數(shù)據(jù).
PHP實(shí)例在controller函數(shù)之前或之后插入邏輯
PHP實(shí)例假設(shè)你需要在controller渲染的每個(gè)view中都設(shè)置一個(gè)顏色數(shù)組,但你不希望在每個(gè)action中都定義它.可以通過 beforeRender() 回調(diào)函數(shù)來實(shí)現(xiàn):
PHP實(shí)例
function beforeRender() {
$this->set('colors',array('red','blue','green');
}
PHP實(shí)例這樣該controller渲染的所有view都可以訪問$colors變量.beforeRender()函數(shù)在controller邏輯結(jié)束后、view被渲染之前執(zhí)行.同樣,beforeFilter()和afterFilter()函數(shù)會(huì)在每個(gè)controller action執(zhí)行的前后執(zhí)行.更多信息請(qǐng)閱讀手冊(cè)的models一節(jié).
PHP實(shí)例為CakePHP添加所見即所得編輯器
PHP實(shí)例這里有一篇非常好的教程教你如何在CakePHP中使用TinyMCE.基本上你只需在頁面上鏈接tiny_mce.js文件,然后添加一些初始化代碼以設(shè)置將哪個(gè)textarea變成TinyMCE編輯器即可.
PHP實(shí)例自定義HABTM關(guān)系的SQL語句
PHP實(shí)例我曾試圖在自定義的SQL語句上定義一個(gè)HABTM關(guān)系(has-and-belongs-to-many),卻遇到了問題.根據(jù)本文撰稿時(shí)的文檔,應(yīng)當(dāng)先在自己的model中設(shè)置finderSql,但從CakePHP的源代碼來看,應(yīng)該設(shè)置finderQuery.這只是文檔中的一個(gè)小問題,但指出問題卻能為他人節(jié)約時(shí)間.Trac ticket在這里.
PHP實(shí)例發(fā)送郵件
PHP實(shí)例我在wiki中找到兩篇教程:發(fā)送郵件和通過PHPMailer發(fā)送郵件.強(qiáng)烈推薦后者,通過PHPMailer發(fā)送郵件更安全,而且不需要自己處理郵件頭,減少許多麻煩.
PHP實(shí)例自定義Helper生成的HTML
PHP實(shí)例我需要修改調(diào)用$html->selectTag()時(shí)生成的<option>,使其生成“請(qǐng)選擇”選項(xiàng)來代替默認(rèn)的空白選項(xiàng).我也希望單選按鈕能帶有標(biāo)簽,這樣用戶就無需精確地點(diǎn)擊單選按鈕本身,而只需單擊到關(guān)聯(lián)的文字上即可.
PHP實(shí)例建立 /app/config/tags.ini.php,然后添加以下的內(nèi)容:
PHP實(shí)例
; 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>"
PHP實(shí)例你可以從/cake/config/tags.ini.php中獲得完整的標(biāo)簽列表.但我不建議修改該文件,否則升級(jí)CakePHP時(shí)可能會(huì)讓你的修改丟失.
PHP實(shí)例自定義404頁面
PHP實(shí)例如果你需要自定義404頁面,只需創(chuàng)建 /app/views/errors/error404.thtml.
PHP實(shí)例更多關(guān)于php框架相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php優(yōu)秀開發(fā)框架總結(jié)》、《codeigniter入門教程》、《ThinkPHP入門教程》、《Zend FrameWork框架入門教程》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
PHP實(shí)例希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助.
轉(zhuǎn)載請(qǐng)注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/1690.html