- Moon.Wong
- 评论(0)

添加新事项
在index操作和对应视图的帮助下,我们能够显示Cake待做事项中所有事项。但是我们还未添加任何事项,屏幕显示“没有任何事项”。因此,接下 来,我们会添加一个表单,可以让我们往Cake待做事项应用中添加事项。为了实现这点,我们需要在我们的tasks控制器中添加一个操作和相对应的视图。
动手时间:创建添加事项的表单
1,打开tasks_controller.php这个文件,向里面添加一个名为add的操作,其代码如下:
function add() {
if ($this->Task->save($this->data)) {
$this->redirect(array('action'=>'index'), null, true);
} else {
$this->Session->setFlash('Task not saved. Try again.');
}
2,在同一文件(tasks_controller.php)中,添加一个数组helper,其值见下面代码:
<?php
class TasksController extends AppController {
var name = 'Tasks';
var helpers = array('Html', 'Form');
...
}
...
}
}
?>
3,在 /CakeTooDoo/app/views/tasks目录下,创建一个新文件,将其命名为add.ctp并向该文件中添加如下代码:
<?php echo $form->create('Task');?>
<legend>Add New Task</legend>
echo $form->input('title');
echo $form->input('done');
?>
<?php echo $form->end('Add Task');?>
4,现在在浏览其中打开http://localhost/CakeTooDoo/tasks/add这个链接来查看添加事项的表单。我们应该可以 见到下面截图中的这个表单:
5,使用这个表单来向Cake待做事项中添加第一个事项,然后点击提交按钮。它会自动转跳到列出所有事项清单的页面,在这里,你可以看到你刚刚添加 进去的事项。
6,这里,让我们将事项清单和添加事项这两个页面链接起来了。在 /CakeTooDoo/app/views目录下的index.ctp文件中,将如下代码添加到文件内容的后面:
<?php echo $html->link('Add Task', array('action'=>'add')); ?>
7,为了将添加事项的页面和查看所有事项的页面连接起来,z在add.ctp(该文件的位置为/CakeTooDoo/app/views/)文件 后面添加如下代码:
<?php echo $html->link('List All Tasks', array('action'=>'index')); ?>
8,现在继续使用我们刚刚创建的添加事项的表单来向应用中添加更多事项。
怎么回事?
我们在Tasks控制器中添加了另外一个名为add的操作。这个操作可以通过 http://localhost/tasks/add这个链接来访问。
当某个请求发往这操作是,它首先检查用户是不是已经通过post方法向服务器发送过来数据 了。Cake会将任何通过post发送过来的数据存储在控制器的$this->data的这个数据组之中,如果没有数据提交,add操作不会执行, 然后视图会显示一个“Add Task”的空表单。
| [ | 当操作执行完毕后,系统会自动返回一个视图。 | ] |
当表单填写好后,我们点击提交按钮,浏览器会通过POST方式将提交的数据发送出去。然后 存储在$this->data.中。当这完成后,它会在这行代码中调用Task模型的create()函数: $this->Task->create(); create()函数会让Task模型做好添加和编辑数据的准备。然后,它调用 save()函数将数据保存进数据库,具体代码是this->Task->save($this->data)。
| [ | create() 和save()函数是两个非常有用的模型函数,以后你会经常使用到它们的。 | ] |
当数据成功保存后,一个提示信息会存储在会话当中(session),然后页面会自动转跳 到index操作。index操作会将新添加进来的事项显示出来,除此之外还有存储在会话当中的提示信息。如果由于某种原因,数据并没有成功的包春静数据 库,一个错误提示性会存储在会话当中,然后CakePHP会将这个错误信息和添加事项的表单显示出来。
我们也向Tasks控制器中添加了HTML和FORM 助手(helper),我们是通过后面这行代码实现的: var $helpers = array('Html', 'Form');。
| [ | 助手(helper)是CakePHP中的一个特殊模块,它通常用来在视图中,用来格式化数据和展示数据。 | ] |
接下来,我们通过在/CakeTooDoo/apps/views/tasks目录下创建 add.ctp文件为add操作添加了对应视图。在add.ctp中,我们首次使用了CakePHP的表单助手来创建一个接受即将保存进模型数据的表单, 我们是使用这段代码来实现的:
echo $form->create('Task');
| [ | 表单助手有一些非常有用的功能,像帮助创建HTML表单,以便使用方便展示和插入数据。 | ] |
用来输入事项标题和状态的HTML输入标签是通 过$form->input('title');和echo $form->input('done')来创建的;最后,我们添加了echo $form->end('Add Task');用来关闭表单标签,并加了一个名字为"Add Task"的提交按钮。
| [ | 我们注意到事项创建时间和修改时间并没有通过添加事项的表单发送给服务器。这是因为CakePHP自动加将时间加入到表中字段类 型为日期以及字段名称为 “created”和“modified”的这两个字段当中。每当添加一个事项时,Cake会将时间保存到 “created”字段中。而当编辑事项时,它会将时间保存到“modified”这个字段当中。 | ] |
最后,我们用HTML助手将索引(显示所有事项)和添加页面(用来添加新事项)连接起来。 通过在index.ctp中添加 $html->link('Add Task', array('action'=>'add')),我们创建了一个连接到添加事项的超链接。而在add.ctp中通过 $html->link('List All Tasks', array('action'=>'index'));,我们添加了一个到所有事项清单页面的超链接。
| [ | HTML助手中有许多有用的功能,它会让书写一些繁琐的HTML标签成为历史。这里我们使用了link()函数,用它来创建 HTML锚记标签。函数的第一个参数是链接显示的名称,而第二个参数是一个用来指向我们想要链接去的操作名。 | ] |