动手时间:创建用来修改事项
![](/icons/73587de.gif)
表单
1
![](/icons/73587dou.gif)
打开 tasks_controller.php文件
![](/icons/73587dou.gif)
添加
![](/icons/73587yi.gif)
个新操作
![](/icons/73587dou.gif)
名为edit
![](/icons/73587dou.gif)
代码如下:
function edit($id = null) {
(!$id) {
$this->Session->
Flash('Invalid Task');
$this->redirect(
.gif' />('action'=>'index'), null, true);
}
(empty($this->data)) {
$this->data = $this->Task->find(
.gif' />('id' => $id));
}
{
($this->Task->save($this->data)) {
$this->Session->
Flash('The Task has been saved');
$this->redirect(
.gif' />('action'=>'index'), null, true);
}
{
$this->Session->
Flash('The Task could not be saved.
Please, try again.');
}
}
}
2
![](/icons/73587dou.gif)
在/CakeTooDoo/app/views/tasks目录中
![](/icons/73587dou.gif)
创建
![](/icons/73587yi.gif)
个名为"edit.ctp"
![](/icons/73587de.gif)
新文件
![](/icons/73587dou.gif)
并向其中添加如下代码:
<?php echo $form->create('Task');?>
<field
>
<legend>Edit Task</legend>
<?php
echo $form->hidden('id');
echo $form->input('title');
echo $form->input('done');
?>
</field
>
<?php echo $form->end('Save');?>
3
![](/icons/73587dou.gif)
为了能从所有事项清单页面访问修改表单页面
![](/icons/73587dou2.gif)
我们应该在该页面添加
![](/icons/73587yi.gif)
个连接到编辑事项页面
![](/icons/73587de.gif)
链接
![](/icons/73587dou2.gif)
打开/CakeTooDoo/app /views中index.ctp文件
![](/icons/73587dou.gif)
然后将HTML注释部分<!-- d
![](/icons/73587if.gif)
ferent actions _disibledevent=>
4
![](/icons/73587dou.gif)
现在在浏览器中输入http://localhost/CakeTooDoo/tasks/index打开所有事项清单页面
![](/icons/73587dou.gif)
点击里你想要编辑事项
![](/icons/73587de.gif)
链接
![](/icons/73587dou.gif)
这个链接会将你转跳到编辑事项
![](/icons/73587de.gif)
表单页面
![](/icons/73587dou.gif)
具体见下面截图:
![](http://www.crazycoder.cn/WebFiles/20099/bb402b3f-f5ec-4c95-bb03-96fc027641f5.jpeg)
图片看不清楚?请点击这里查看原图(大图)
![](/icons/73587dou2.gif)
5
![](/icons/73587dou.gif)
现在让我们在编辑事项
![](/icons/73587de.gif)
表单页面添加
![](/icons/73587yi.gif)
个连接到所有事项清单页面和添加事项页面
![](/icons/73587de.gif)
链接
![](/icons/73587dou2.gif)
在CakeTooDoo/app/views目录下edit.ctp文件
![](/icons/73587de.gif)
后面添加如下代码:
<?php echo $html->link('List All Tasks',
.gif' />('action'=>'index')); ?><br />
<?php echo $html->link('Add Task',
.gif' />('action'=>'add')); ?>
怎们回事?
我们在Tasks控制器中添加了
![](/icons/73587yi.gif)
个新
![](/icons/73587de.gif)
操作
![](/icons/73587dou.gif)
名为edit
![](/icons/73587dou2.gif)
然后
![](/icons/73587dou.gif)
我们继续为这个操作添加了对应
![](/icons/73587de.gif)
视图文件
![](/icons/73587dou2.gif)
随后
![](/icons/73587dou.gif)
我们使用HTML助手为编辑事项页面添加了
![](/icons/73587yi.gif)
些转跳到其他页面
![](/icons/73587de.gif)
链接
![](/icons/73587dou2.gif)
当我们访问该页面时
![](/icons/73587dou.gif)
我们需要告诉该操作我们需要修改哪个事项
![](/icons/73587dou2.gif)
我们是通过网址(URL)向该操作传输对应事项
![](/icons/73587de.gif)
唯
![](/icons/73587yi.gif)
ID来实现
![](/icons/73587de.gif)
![](/icons/73587dou2.gif)
因此
![](/icons/73587dou.gif)
如果我们想要编辑ID为2
![](/icons/73587de.gif)
事项
![](/icons/73587de.gif)
内容
![](/icons/73587dou.gif)
我们则需要将我们
![](/icons/73587de.gif)
浏览器指向http://localhost /CakeTooDoo /tasks/edit/2
![](/icons/73587dou2.gif)
当浏览器发送出该请求时
![](/icons/73587dou.gif)
Cake将该请求发送给Tasks控制器
![](/icons/73587de.gif)
edit操作
![](/icons/73587dou.gif)
然后将id
![](/icons/73587de.gif)
值作为edit操作
![](/icons/73587de.gif)
![](/icons/73587yi.gif)
个参数
![](/icons/73587dou2.gif)
如果我们检查下edit
![](/icons/73587de.gif)
操作
![](/icons/73587dou.gif)
我们就会注意到该操作接受
![](/icons/73587yi.gif)
个名为$id
![](/icons/73587de.gif)
参数
![](/icons/73587dou2.gif)
URL传输过来
![](/icons/73587de.gif)
ID就会存储在该参数的中
![](/icons/73587dou2.gif)
当
![](/icons/73587yi.gif)
个请求发送到edit操作时
![](/icons/73587dou.gif)
该操作做
![](/icons/73587de.gif)
第
![](/icons/73587yi.gif)
件事检查id值有没有提供
![](/icons/73587dou2.gif)
Cake为了让用户编辑
![](/icons/73587yi.gif)
个事项
![](/icons/73587dou.gif)
它需要知道用户想要编辑事项
![](/icons/73587de.gif)
id
![](/icons/73587dou2.gif)
如果没有提供id
![](/icons/73587de.gif)
话
![](/icons/73587dou.gif)
操作是不会继续执行下去
![](/icons/73587de.gif)
![](/icons/73587dou2.gif)
因此
![](/icons/73587dou.gif)
如果$id没有定义
![](/icons/73587de.gif)
话
![](/icons/73587dou.gif)
它会向会话(session)中添加
![](/icons/73587yi.gif)
个
![](/icons/73587cuowu.gif)
提示信息
![](/icons/73587dou2.gif)
然后转跳到index操作
![](/icons/73587dou.gif)
这个操作会显示目前所有事项
![](/icons/73587de.gif)
![](/icons/73587yi.gif)
个清单
![](/icons/73587dou.gif)
除此的外还有
![](/icons/73587yi.gif)
个
![](/icons/73587cuowu.gif)
提示信息
![](/icons/73587dou2.gif)
如果$id有定义
![](/icons/73587dou.gif)
edit操作会检查$this->data中是否存储有任何数据
![](/icons/73587dou2.gif)
如果$this->data没有存储有数据
![](/icons/73587dou.gif)
这意味着用户还没有编辑
![](/icons/73587dou2.gif)
因此
![](/icons/73587dou.gif)
Cake会从Task模型提出需要
![](/icons/73587de.gif)
事项信息
![](/icons/73587dou.gif)
然后将其存储在$this->data
![](/icons/73587dou.gif)
实现这
![](/icons/73587yi.gif)
操作
![](/icons/73587de.gif)
代码段是这段: $this->data = $this->Task->find(
![](/icons/73587<img src=)
.gif' />('id' => $id));
![](/icons/73587yi.gif)
旦完成这步后
![](/icons/73587dou.gif)
Cake会将编辑(edit)操作
![](/icons/73587de.gif)
视图提交给浏览器
![](/icons/73587dou.gif)
用来展示task事项
![](/icons/73587de.gif)
信息
![](/icons/73587dou2.gif)
这个视图会从$this->data获取事项信息然后展示出来
![](/icons/73587dou2.gif)
编辑操作
![](/icons/73587de.gif)
视图跟添加操作
![](/icons/73587de.gif)
视图非常相似
![](/icons/73587dou.gif)
只有
![](/icons/73587yi.gif)
处区别
![](/icons/73587dou2.gif)
那就是该视图多出
![](/icons/73587yi.gif)
行代码echo $form->hidden('id');这行代码会输出
![](/icons/73587yi.gif)
个隐藏
![](/icons/73587de.gif)
输入框HTML代码
![](/icons/73587dou.gif)
它
![](/icons/73587de.gif)
值为当前事项
![](/icons/73587de.gif)
id值
![](/icons/73587yi.gif)
旦用户编辑完
![](/icons/73587dou.gif)
然后点击保存按钮
![](/icons/73587dou.gif)
编辑好
![](/icons/73587de.gif)
数据会重新发送给编辑操作
![](/icons/73587dou.gif)
然后将相应
![](/icons/73587de.gif)
数据保存在$this->data中
![](/icons/73587dou2.gif)
![](/icons/73587yinwei.gif)
$this->data有数据
![](/icons/73587dou.gif)
这意味着用户已经编辑并提交了修改好
![](/icons/73587de.gif)
数据
![](/icons/73587dou2.gif)
因此如果$this->data不为空
![](/icons/73587de.gif)
话
![](/icons/73587dou.gif)
编辑操作将
![](/icons/73587diaoyong.gif)
Task模型
![](/icons/73587de.gif)
save
![](/icons/73587kh.gif)
![](/icons/73587hanshu.gif)
来保存数据:$this->Task->save($this->data). 我们在添加操作中使用过相同
![](/icons/73587de.gif)
![](/icons/73587hanshu.gif)
![](/icons/73587dou2.gif)
[ 你可能想知道模型
![](/icons/73587de.gif)
save
![](/icons/73587kh.gif)
![](/icons/73587hanshu.gif)
是如何自己知道什么时候该添加
![](/icons/73587yi.gif)
条新记录
![](/icons/73587dou.gif)
什么时候只是修改
![](/icons/73587yi.gif)
个已经存在
![](/icons/73587de.gif)
记录
![](/icons/73587de.gif)
![](/icons/73587dou2.gif)
如果表单数据有
![](/icons/73587yi.gif)
个隐藏
![](/icons/73587de.gif)
id字段
![](/icons/73587dou.gif)
这
![](/icons/73587hanshu.gif)
就知道
![](/icons/73587dou.gif)
它需要做
![](/icons/73587de.gif)
就是编辑对应id
![](/icons/73587de.gif)
现有事项
![](/icons/73587dou2.gif)
如果没有找到id字段
![](/icons/73587dou.gif)
这个
![](/icons/73587hanshu.gif)
会添加
![](/icons/73587yi.gif)
个新
![](/icons/73587de.gif)
记录
![](/icons/73587dou2.gif)
]
![](/icons/73587yi.gif)
旦数据得以成功更新
![](/icons/73587dou.gif)
Cake会将
![](/icons/73587yi.gif)
个保存成功
![](/icons/73587de.gif)
信息存储在会话当中
![](/icons/73587dou.gif)
然后转跳到index操作
![](/icons/73587dou2.gif)
index页面会显示
![](/icons/73587yi.gif)
个保存成功
![](/icons/73587de.gif)
信息
延伸阅读
最新评论