点击这里:CakePHP应用开发:第 3章 简单应用的开发例子(5.修改事项)

  动手时间:创建用来修改事项表单

  1打开 tasks_controller.php文件添加个新操作名为edit代码如下:

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在/CakeTooDoo/app/views/tasks目录中创建个名为"edit.ctp"新文件并向其中添加如下代码:

<?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为了能从所有事项清单页面访问修改表单页面我们应该在该页面添加个连接到编辑事项页面链接打开/CakeTooDoo/app /views中index.ctp文件然后将HTML注释部分<!-- dferent actions _disibledevent=>

  4现在在浏览器中输入http://localhost/CakeTooDoo/tasks/index打开所有事项清单页面点击里你想要编辑事项链接这个链接会将你转跳到编辑事项表单页面具体见下面截图:

  图片看不清楚?请点击这里查看原图(大图)

  5现在让我们在编辑事项表单页面添加个连接到所有事项清单页面和添加事项页面链接在CakeTooDoo/app/views目录下edit.ctp文件后面添加如下代码:

<?php echo $html->link('List All Tasks', .gif' />('action'=>'index')); ?><br />
<?php echo $html->link('Add Task', .gif' />('action'=>'add')); ?> 


  怎们回事?

  我们在Tasks控制器中添加了个新操作名为edit然后我们继续为这个操作添加了对应视图文件随后我们使用HTML助手为编辑事项页面添加了些转跳到其他页面链接

  当我们访问该页面时我们需要告诉该操作我们需要修改哪个事项我们是通过网址(URL)向该操作传输对应事项ID来实现因此如果我们想要编辑ID为2事项内容我们则需要将我们浏览器指向http://localhost /CakeTooDoo /tasks/edit/2当浏览器发送出该请求时Cake将该请求发送给Tasks控制器edit操作然后将id值作为edit操作个参数如果我们检查下edit操作我们就会注意到该操作接受个名为$id参数URL传输过来ID就会存储在该参数的中

  当个请求发送到edit操作时该操作做件事检查id值有没有提供Cake为了让用户编辑个事项它需要知道用户想要编辑事项id如果没有提供id操作是不会继续执行下去因此如果$id没有定义它会向会话(session)中添加提示信息然后转跳到index操作这个操作会显示目前所有事项个清单除此的外还有提示信息

  如果$id有定义edit操作会检查$this->data中是否存储有任何数据如果$this->data没有存储有数据这意味着用户还没有编辑因此Cake会从Task模型提出需要事项信息然后将其存储在$this->data实现这操作代码段是这段: $this->data = $this->Task->find(.gif' />('id' => $id));旦完成这步后Cake会将编辑(edit)操作视图提交给浏览器用来展示task事项信息这个视图会从$this->data获取事项信息然后展示出来

  编辑操作视图跟添加操作视图非常相似只有处区别那就是该视图多出行代码echo $form->hidden('id');这行代码会输出个隐藏输入框HTML代码值为当前事项id值

  旦用户编辑完然后点击保存按钮编辑好数据会重新发送给编辑操作然后将相应数据保存在$this->data中$this->data有数据这意味着用户已经编辑并提交了修改好数据因此如果$this->data不为空编辑操作将Task模型save来保存数据:$this->Task->save($this->data). 我们在添加操作中使用过相同

  [ 你可能想知道模型save是如何自己知道什么时候该添加条新记录什么时候只是修改个已经存在记录如果表单数据有个隐藏id字段就知道它需要做就是编辑对应id现有事项如果没有找到id字段这个会添加个新记录 ]



  旦数据得以成功更新Cake会将个保存成功信息存储在会话当中然后转跳到index操作index页面会显示个保存成功信息



Tags:  点击这里

延伸阅读

最新评论

发表评论