《PHP编程:cakephp常见知识点汇总》要点:
本文介绍了PHP编程:cakephp常见知识点汇总,希望对您有用。如果有疑问,可以联系我们。
PHP实例本文实例总结了cakephp常见知识点.分享给大家供大家参考,具体如下:
PHP实例1. 调用其他控制器的模板,重定向
PHP实例方法一:
PHP实例在此调用/views/tasks/tasks下的hello.ctp模板
PHP实例
$this -> viewPath = 'tasks';
$this -> render('hello');
PHP实例方法二(带参):
PHP实例$this->redirect(array('controller'=>'users','action'=>'welcome',urlencode($this->data['姓名'].'haha')));
PHP实例2. 查询
PHP实例直接使用sql:
PHP实例
$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实例find的参数,第一个可以是all、first、count,第二个参数为一数组,数组的key可以是:conditions、fields、order、limit、offset、joins.
PHP实例添加:
PHP实例
$this->clue->create();
$this->clue->save($this->data);
PHP实例修改:
PHP实例
$this->clue->create();
$this->clue->save($this->data);
PHP实例删除:
PHP实例
$this->clue->delete($id)
PHP实例3. 不需要公共样式时
PHP实例
$this->layout = false;
PHP实例不用渲染任何view
PHP实例
$this->autoRender = false;
PHP实例4. 定义公共的方法/类
PHP实例方法一:
PHP实例可以在/app/Controller/AppController.php中定义公共的方法
PHP实例调用
PHP实例
$this->test();
PHP实例方法二:
PHP实例在/app/controllers/components中创建UtillComponent.php
PHP实例
<?php
class UtillComponent extends Object
{
function juanstr ($str) {
return $str.'+juanstr';
}
}
?>
PHP实例调用:
PHP实例
var $components = array('Utill');
$digit1 = $this->Utill->juanstr($digit1);
PHP实例5. 定义提示信息
PHP实例
$this->Session->setFlash(__('The user has been saved'));
<p class="wrong"><?php echo $this->Session->flash();?></p>
PHP实例或者
PHP实例
$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实例6. session设置
PHP实例可参考:/article/106557.htm
PHP实例check(string $name);
PHP实例检查Session中是否已有$name为键值的数据项.
PHP实例del(string $name);
delete(string $name);
PHP实例删除$name 指定的 Session 变量.
PHP实例valid当Session有效时返回true,最好在read()操作前用它来确定你要访问的会话是否确实有效.
PHP实例read(string $name);
PHP实例返回 $name 变量值.
PHP实例renew
PHP实例通过创建新的seesion ID,删除原有的ID,将原有Session中信息更新到新的Session中.
PHP实例write(string $name, mixed $value);
PHP实例将变量 $name,$value写入会话.
PHP实例error
PHP实例返回最近由 Cake Session Component 产生的错误,常用于调试.
PHP实例7. 表单
PHP实例
<?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);' //提交前验证
)
);
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">下拉单选(编辑页面会自动判断选中)</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,//所有选项
'multiple'=>'checkbox',
'selected' => $pushtypes,//选中的项
));
?>
</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实例8. 日志$this->log();
PHP实例在controller直接调用:
PHP实例
$this->log('Something brok2',LOG_DEBUG);
PHP实例或view里调用:
PHP实例
<?php $this->log('Something brok2',LOG_DEBUG); ?>
PHP实例日志的类型大致有以下几种:
PHP实例
$levels = array(
LOG_WARNING=> 'warning',
LOG_NOTICE=> 'notice',
LOG_INFO=> 'info',
LOG_DEBUG=> 'debug',
LOG_ERR=> 'error',
LOG_ERROR=> 'error'
);
PHP实例日志文件都保存在/app/tmp/logs目录.
PHP实例在/app/config/core.php文件中有日志的配置选项:
PHP实例
define('LOG_ERROR', 2);
PHP实例9. 渲染路径
PHP实例
echo APP . 'webroot' . DS;
//D:\wamp\www\cakephp\app\webroot\
echo APP . 'webroot' ;
D:\wamp\www\cakephp\app\webroot
PHP实例附:CakePHP必知的21条技巧
PHP实例这篇文章可以说是CakePHP教程中最经典的了.虽然不是完整的手把手系列,但作者将自己使用CakePHP的经验总结了21条,这些尤其是对新手十分有用.
PHP实例翻译时故意保留了一些CakePHP中特有的词语没有翻译,如controller、model等.相信学过CakePHP的人应该马上就能理解它们的意思吧.
PHP实例另外,CakePHP的wiki已经失效,取而代之的是一个名为bakery的网站.原文中引用的wiki的链接也都已更新到了bakery上.
PHP实例快速创建静态页面
PHP实例我想建立几个页面,它们仅包含静态数据,使用默认layout,不需要任何model.最初我试图创建一个controller并为每个静态页面定义一个action.但这种方法很笨拙,也不适合快速创建静态页面.
PHP实例实际上只要使用pages controller就可以做到――只要在 views/pages 文件夹下创建一个view,就可以通过 /pages 来访问.例如,我创建了 /views/pages/matt.thtml ,就可以通过http://www.example.com/pages/matt 来访问.
PHP实例改变静态页面的标题
PHP实例使用pages controller时如果想改变页面标题,只需在view中加入以下代码:
PHP实例
<? $this->pageTitle = 'Title of your page.'; ?>
PHP实例在静态页面中向layout发送数据
PHP实例如果需要向layout传递数据(例如表示导航栏中哪个部分应该高亮显示的变量),可以在view中添加下面的代码:
PHP实例
<? $this->_viewVars['somedata'] = array('some','data'); ?>
PHP实例这个数组就可以在layout中通过$somedata来访问.
PHP实例快速创建后台管理
PHP实例如果你需要创建后台管理程序,并且希望所有管理action都位于某个特定文件夹下,那么打开 config/core.php 并将下面这一行的注释去掉:
PHP实例
define('CAKE_ADMIN', 'admin');
PHP实例这样所有以"admin_"开头的action都可以通过 /admin/yourcontroller/youraction 来访问.例如,如果在posts controller中创建了名为"admin_add"的action,那么可以通过 www.example.com/admin/posts/add 访问这个action.这样就可以方便地为admin目录设置密码以避免他人随意访问.
PHP实例查看后台执行的SQL语句
PHP实例只需改变config/core.php中的DEBUG常量,即可看到后台执行的SQL语句.0为产品级,1为开发级,2为完整调试SQL,3为完整调试SQL并显示对象数据.我通常将DEBUG设置为2,这样每页的底部会显示出一个包含SQL调试信息的表格.
PHP实例如果页面底部添加的表格会破坏页面布局(特别是使用Ajax获取页面并显示到页面中间而不是底部时),你可以在CSS中添加以下代码以隐藏调试信息:
PHP实例
#cakeSqlLog { display: none; }
PHP实例这样既能保持页面布局,又可以通过查看源代码来看到调试信息.当然最后发布网站时别忘了将调试级别改回0.
PHP实例获取丰富的开发文档
PHP实例别总是盯着手册.wiki和API也是无价之宝.wiki中的开发指南十分有用,而API文档初看起来比较难,但你很快就会发现这里的信息对你创建CakePHP网站十分重要.
PHP实例使用bake.php
PHP实例Bake是个命令行PHP脚本,可以根据数据库自动生成model、controller和view.在开发的最初阶段,我强烈推荐使用scaffolding让你的原型程序跑起来.但如果你清楚地知道scaffolding不合适,我推荐你使用bake.bake会生成所有的文件并保存到磁盘上,以便你随意修改.这样能节省创建关联、view、基本的CRUD crollder操作的重复工作.
PHP实例(译者注:CRUD - Create, Read, Update, Delete,数据库应用的四种基本操作,即"增删查改".)
PHP实例bake很方便.你只需在数据库中建立一个表,然后到 /cake/scripts/ 目录下执行php bake.php 即可.
PHP实例如果你通过交互方式来运行bake,它会分几步提示你创建model、controller和view.创建结束之后,我通常会阅读所有生成的代码并做必要的修改.
PHP实例发布程序时注意权限
PHP实例有一次我在发布程序时,将整个cake目录打包然后用scp上传到了服务器上.只要一关闭调试信息,就会出现错误――数据库调用无法返回任何数据.我一筹莫展,因为我必须通过调试信息才能调试问题.后来有人告诉我,/app/tmp应当对apache可写.将权限改为777之后问题就解决了.
PHP实例复杂model验证
PHP实例我需要进行更复杂的验证,而不仅仅是验证输入框非空或者符合某个正则表达式这样的简单验证.例如,我要验证用户注册时使用的邮件地址是否已被使用.在wiki中我找到了这篇关于高级验证的文章,其中提到了一些十分有用的高级验证方法.
PHP实例记录错误日志
PHP实例
$this->log('Something broke');
PHP实例这样可以将错误记录到 /tmp/logs/ 中(我最初以为会记录到apache的错误日志中).
PHP实例让controller使用其他model
PHP实例如果你的controller需要调用来自不同model的数据,只要在controller开头使用如下代码:
PHP实例
class yourController extends AppController {
var $uses = array('Post','User');
}
PHP实例这样controller就能访问Post和User model了.
PHP实例创建不使用数据库表的model
PHP实例我需要创建一个不使用任何表的model.例如,我想通过$validate数组方便底验证输入数据,保持model逻辑的正确性.但创建model时对应的表不存在,CakePHP就会报错.通过在model中加入以下代码可以解决这个问题:
PHP实例
var $useTable = false;
PHP实例你也可以通过这种方法改变model对应的表名.
PHP实例
var $useTable = 'some_table';
PHP实例重定向之后记得exit()
PHP实例对于有经验的人来说这应当是理所当然的事儿,调用 $this->redirect() 之后,剩下的代码如果不想运行要exit().我也这样做,但以前曾经认为 $this->redirect() 会为我调用exit(实际上不会).
PHP实例高级model函数
PHP实例翻翻API就能发现很多你不知道的非常有用的函数.我强烈推荐至少阅读一遍 Model 类的参考手册.下面是以前我没注意到的几个重要函数:
PHP实例① generateList()
- 主要用于生成选择框(<SELECT>)所需的数据
② query()
- 自己写SQL语句来查询
③ findCount()
- 返回满足指定条件的行数
④ hasAny()
- 当有记录满足条件时返回真
PHP实例再次强烈推荐阅读整个model类参考,你会为你学到的东西赞叹的.
PHP实例如何正确插入多行
PHP实例我需要遍历一个列表,并将其中的每个元素都插入到数据库中.我发现如果在一次插入完成后立即进行下一次插入,那么第二次插入的内容完全不会被插入,而是会被更新到第一次插入的行中.例如:
PHP实例
$items = array('Item 1','Item 2','Item 3');
foreach ($items as $item) {
$this->Post->save(array('Post' => array('title' => $item)));
}
PHP实例这段代码将在posts表中插入仅一行:“Item 3”.CakePHP首先插入“Item 1”,但马上将其更新为“Item 2”,再更新为“Item 3”,因为$this->Post->id保存的是上一次插入成功的行的id.通常这个特性很有用,但在这个例子中反而帮了倒忙.其实只要在每次插入之后设置 $this->Post->id = false 就可以解决这个问题.
PHP实例更新:有人发邮件告诉我,正确的做法是调用create()初始化model,再set/save新数据.
PHP实例在controller函数之前或之后插入逻辑
PHP实例假设你需要在controller渲染的每个view中都设置一个颜色数组,但你不希望在每个action中都定义它.可以通过 beforeRender() 回调函数来实现:
PHP实例
function beforeRender() {
$this->set('colors',array('red','blue','green');
}
PHP实例这样该controller渲染的所有view都可以访问$colors变量.beforeRender()函数在controller逻辑结束后、view被渲染之前执行.同样,beforeFilter()和afterFilter()函数会在每个controller action执行的前后执行.更多信息请阅读手册的models一节.
PHP实例为CakePHP添加所见即所得编辑器
PHP实例这里有一篇非常好的教程教你如何在CakePHP中使用TinyMCE.基本上你只需在页面上链接tiny_mce.js文件,然后添加一些初始化代码以设置将哪个textarea变成TinyMCE编辑器即可.
PHP实例自定义HABTM关系的SQL语句
PHP实例我曾试图在自定义的SQL语句上定义一个HABTM关系(has-and-belongs-to-many),却遇到了问题.根据本文撰稿时的文档,应当先在自己的model中设置finderSql,但从CakePHP的源代码来看,应该设置finderQuery.这只是文档中的一个小问题,但指出问题却能为他人节约时间.Trac ticket在这里.
PHP实例发送邮件
PHP实例我在wiki中找到两篇教程:发送邮件和通过PHPMailer发送邮件.强烈推荐后者,通过PHPMailer发送邮件更安全,而且不需要自己处理邮件头,减少许多麻烦.
PHP实例自定义Helper生成的HTML
PHP实例我需要修改调用$html->selectTag()时生成的<option>,使其生成“请选择”选项来代替默认的空白选项.我也希望单选按钮能带有标签,这样用户就无需精确地点击单选按钮本身,而只需单击到关联的文字上即可.
PHP实例建立 /app/config/tags.ini.php,然后添加以下的内容:
PHP实例
; 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实例你可以从/cake/config/tags.ini.php中获得完整的标签列表.但我不建议修改该文件,否则升级CakePHP时可能会让你的修改丢失.
PHP实例自定义404页面
PHP实例如果你需要自定义404页面,只需创建 /app/views/errors/error404.thtml.
PHP实例更多关于php框架相关内容感兴趣的读者可查看本站专题:《php优秀开发框架总结》、《codeigniter入门教程》、《ThinkPHP入门教程》、《Zend FrameWork框架入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
PHP实例希望本文所述对大家PHP程序设计有所帮助.
转载请注明本页网址:
http://www.vephp.com/jiaocheng/1690.html