CakePHP自学笔记(四):CakePHP的命名规范
by AquarHEAD
AquarTutorial 第一期
-CakePHP自学笔记
(一):利用Ubuntu搭建开发环境
(二):数据库配置与连接
(三):MVC开发模式简介
>>(四):CakePHP的命名规范
<-<-<-<-<-<-<-<-<-<-<-<-<-
基本的命名规则
上篇笔记中我们刚刚对MVC开发模式有了一个简单的认识,在进行开发之前,我们首先要熟悉CakePHP的一些命名规范,所谓命名规范也就是数据表、模型文件、模型、控制器文件、控制器、视图文件等的命名的一些规范,注意这是规范不是规定,即并不是必须的,但遵循默认的命名规范能大大加快开发速度,并减少不必要的麻烦。
比如你要给程序添加一系列关于物品(item)的功能,比如查看、购买等等,你最好:
- 用items命名数据表;
- 用item.php命名模型文件,放在app/models目录下,用Item命名我们的模型(见下文);
- 用items_controller.php命名控制器文件,放在app/controllers目录下,用Items命名我们的控制器
- 在app/views目录下建立items子目录
注意有几处单复数的差别。
示范代码
终于到动手写写代码的时候了,首先打开app/models/item.php添加如下代码:
<?php class Item extends AppModel{ var $name = 'Item'; } ?>
然后继续修改app/controllers/items_controller.php。
<?php class ItemsController extends AppController { var $name = 'Items'; ?>
这样就完成了最基本的模型和控制器,我们所写的模型都继承AppModel类,而AppModel类又继承Model类,同样,程序中的控制器都继承AppController类,后者又继承Controller类,此处Model类和Controller类都由CakePHP的内核提供。我们可以更改AppController类,比如增加Auth组件,这样程序的所有控制器都会默认加载这个组件。
注意我们并没有为模型指明具体的数据表,也没有为控制器指明要使用的模型,这就是CakePHP命名规范的作用:默认情况下,单数命名的模型会自动调用复数命名的数据表(比如Item这个模型就会默认与items这个数据表交互),复数命名的控制器会自动调用单数命名的模型(所以ItemsController会默认调用Item这个模型),最后视图会自动接受控制器的相应函数返回的数据,马上就来实现一个视图。
函数和视图
一个控制器可能有很多函数,而每个函数都有相对应的视图,所以我们要在控制器对应的视图目录下以函数名添加视图。这里插一句CakePHP构造链接的方法,比如这个items控制器有个buy函数来实现购买功能,这时如果CakePHP的程序所在的目录是http://www.example.com/cake,那么这个buy函数对应的视图渲染的页面就是http://www.example.com/cake/items/buy,而如果我们访问http://www.example.com/cake/items,即直接访问这个控制器,Cake会默认返回index函数及其视图。
下面我们为Items这个控制器添加index函数,简单地返回所有items数据表中的条目。修改app/controllers/items_controller.php。
<?php class ItemsController extends AppController { var $name = 'Items'; function index() { $this->set('items',$this->Item->find('all')); } ?>
这里set函数就是用来从控制器向视图传递数据的,它会以数组的形式传递数据。具体可以看这个页面。
然后我们创建app/views/items/index.ctp文件并添加如下内容:
<h1>Show Items</h1> <table> <tr> <th>Id</th> <th>Name</th> </tr> <?php foreach ($items as $item): ?> <tr> <td><?php echo $item['Item']['id']; ?></td> <td><?php echo $item['Item']['name']; ?></td> </tr> <?php endforeach; ?> </table>
在数据表中添加一些数据(此处我们假定只展示数据表中id和name两项),然后访问http://localhost/caketest/items就能看到一个展示items数据的表格。
P.S.对于多词组的名字,命名规范如下:
- 数据表名:user_profiles;
- 模型名:UserProfile,模型文件名:user_profile.php;
- 控制器名:UserProfilesController,控制器文件名:user_profiles_controller.php
- 视图文件目录:user_profiles