发新话题
打印

CakePHP的一些笔记

CakePHP的一些笔记

尝试CakePHP的bake功能。
先安装一个能运行的CakePHP,然后把相应的路径添加到系统的PATH环境变量里去(比如:C:\Program Files\Apache Group\Apache2\htdocs\cake\cake\console),然后,在命令行(cmd)里进入相应的工作目录(比如:C:\Program Files\Apache Group\Apache2\htdocs\cake\app),就可以使用bake功能来生成代码了。具体命令是:cake bake,然后会有简单的提示,你只要对着做就可以了。
使用bake来生成常用功能。
最简单的方法是使用脚手架方式,当你bake控制器的时候,系统会先问“Would you like bake to build your controller interactively?”,选择是,然后系统问“Would you like to use scaffolding?”,你只要回答是就搞定了。不过这样的脚手架是动态的,我们没法修改程序和模板,如果你想生成实实在在的代码,以bake控制器为例:当系统问“Would you like bake to build your controller interactively?”的时候,选择否(也可以选择是,然后在系统问“Would you like to use scaffolding? ”时再选择否就可以了),然后系统会接着问“Would you like to include some basic class methods (index(), add(), view(), edit())? ”,这时候选择是,就会生成实实在在的控制器代码了,相应的视图代码bake方法雷同。通过看这些bake出来的代码,也可以加深我们对cakephp用法的了解,代码片段如下:
复制内容到剪贴板
代码:
function add() {
       if (!empty($this->data)) {
         $this->cleanUpFields();
         $this->model->create();
         if ($this->model->save($this->data)) {
           $this->Session->setFlash('The model has been saved');
           $this->redirect(array('action'=>'index'), null, true);
         } else {
           $this->Session->setFlash('The model could not be saved. Please, try again.');
         }
       }
}
(后面还会用到这段代码说明几个问题)
CakePHP控制器里的cleanUpFields方法。
在上面bake出来的控制器代码中,我们看到了一个cleanUpFields方法,它是什么用处呢?要说起它的作用,还要牵扯出来form视图助手,当我们使用form视图助手去生成一些和时间有关的代码时,比如说使用form视图助手的year(),month(),hour(),dateTime()等方法时,视图助手会生成一些诸如“$fieldName . "_year"”之类的input名字,通过cleanUpFields方法,就可以计算出$fieldName应该是什么时间,并且删除“$fieldName . "_year"”之类的变量。
CakePHP代码中潜在的安全问题。
在bake控制器代码的时候,我们看到add()方法里的代码流程大致是这样的:
复制内容到剪贴板
代码:
$this->model->create();
if ($this->model->save($this->data)) {
      // ..
}
通过查看CakePHP源代码,可以发现在save的时候,存在注入的危险,用户可以通过给表单注入一个id字段,使add方法实际执行的是类似edit的动作。具体原因参考如下链接()。

TOP

这篇文章的 RSS 的部分输出很有意思:

尝试CakePHP的bake功能。

... ...

使用bake来生成常用功能。

最简单的方法是使用脚

TOP

谢谢你的介绍
努力为phpres做贡献
时刻准备着,当机会来临时你就成功了
打好基础,增加社会经验
资深技术工程师是我的梦想
承接各种团体网站外包服务和各种it技术培训
准备申请AJAX版大,希望大家支持~~

TOP

怎么我的不可以,他说不是内部命令。

TOP

发新话题