- Moon.Wong
- 评论(0)
查看Cake待做事项应 用中的所有事项
好了,Task模型和Tasks控制器已经准备就绪俩,让我们向我们的应用中加入一些功能 吧。我们首先要添加的的功能就是以一个列表的形式查看所有的事项。为了实现这点,我们需要往Tasks控制器中加入一个功能,除此之外,我们也会添加一个 视图供我们展示所有事项的清单。
动手时间:查看所有的事项
1,打开文件tasks_controller.php,然后添加一个名为index的方法(method),代码如下。控制器类中的所有公共函数 都被称为操作 (action),因此在我们往TasksController类中加入了index操作代码之后,我们的tasks_controller.php代码 应该跟下面差不多:
<?php
function index() {
$this->set('tasks', $this->Task->find('all'));
}
2,点击进入到 CakeTooDoo/app/views文件夹下,创建一个名为tasks的文件夹。
3,在我们刚刚创建的tasks文件夹下,创建一个名为index.ctp的新文件,然后在其中添加如下代码。
<h2>Tasks</h2>
<?php if(empty($tasks)): ?>
There are no tasks in this list
<?php else: ?>
<table>
<th>Status</th>
<th>Created</th>
<th>Modified</th>
<th>Actions</th>
<?php foreach ($tasks as $task): ?>
<?php echo $task['Task']['title'] ?>
</td>
<td>
<?php if($task['Task']['done']) echo "Done";else echo "Pending";?>
</td>
<td>
<?php echo $task['Task']['created'] ?>
</td>
<td>
<?php echo $task['Task']['modified'] ?>
</td>
<td>
<!-- actions on tasks will be added later -->
</td>
<?php endforeach; ?>
</table>
<?php endif; ?>
<?php endforeach; ?>
</table>
<?php endif; ?>
4,打开浏览器,访问这个网址http://localhost/CakeTooDoo/tasks/index查看所有事项清单。因为我们还未添 加任何事项,你应该会一个“ 尚无事项(There are no tasks)”信息提示,如下面截图所示:
怎么回事?
我们创建了一个名为index的控制器的方法(controller method )。控制器中的方法(method)被称为“操作”。index这个我们刚刚添加的“操作”会处理 http://localhost/CakeTooDoo/tasks/index这个地址发出的请求。
| [ | Cake的网址遵循下面这种形式http://域名/Cake应用文件夹名/控制器名/操作名 | ] |
当请求传送给index操作时,index操作会执行如下代 码:$this->set('tasks',$this->Task->find('all'));。这个代码调用Task模型的函数 find(),然后返回存储在tasks表中的所有信息。
| [ | CakePHP中的所有模型都有find()函数功能。实际上这个函数是在model类中定义的。这个函数是用来调取模型对应表 中的数据。如果我们给这个函数传递一些参数的话,我们就能指定调取哪条记录。上面的代码中,我们将all参数传递给这函数,以调取task表中的所有记 录。 | ] |
然后,我们使用了Set()这个Tasks控制器的函数,它将所有的数据用一个名为 tasks的数组发送给视图处理。我们在视图里可以通过$tasks这个变量来访问该数组。
| [ | set()函数通常用来从控制器中的操作向视图中传输数据。这个函数通常需要两个参数。第一个参数是这个数据在视图中拥有的变量 名称。第二个是控制器要传输的实际数据。set函数实际上是在控制器的核心类中定义的,该函数继承给了AppController,而 AppController又继承给了所有的CakePHP应用的控制器。 | ] |
跟模型和控制器一样,Cake也为所有的视图准备了一个单独的文件夹。在视图文件夹里,我 们创建了一个名为tasks的文件夹,它是用来存放Tasks控制器的所有视图的。因为一个控制器能有许多操作(action),而每个操作有对应一个视 图,因此一个控制器有许多视图。Cake将每个控制器的所有视图都保存在视图文件夹下对应的单独的文件夹里(文件夹的名字跟控制器的名字一样)
| [ |
CakePHP的命名规则: Cake所有的视图文件都保存在app文件夹下的视图文件夹里,在这个文件夹里,单个控制器的所有视图有被保存在以控制器名字命名的子文件夹里。 |
] |
在view目录下的tasks文件夹下,我们创建了一个名为index.ctp的文件。这 个文件是我们Tasks控制器index操作所对应的视图文件。这个操作的名称和它对应视图文件的名称总是相同的。视图文件的后缀名是.ctp,ctp是 Cake模板页面(Cake Template Pages)的简称
| [ |
CakePHP的命名规则: 控制器的操作名和它对应的视图文件的文件名是相同的。 |
] |
在index.ctp文件中,我们往里面混杂一些PHP和HTML代码,我们用一个 HTML的表来显示Cake待做事项中的所有内容。之前我们在Index操作中已经使用过set()函数将一个名为tasks的数组发送给视图了。现在我 们可以在视图中访问这个数组。我们使用简单的PHP代码,就可以将Cake待做事项中存储的所有内容都显示出来。