cakephp控制器

cakephp的请求示意图:


黑色 = 请求的元素, 灰色 = 可选的元素, 了;蓝色 = 回调方法

  1. Ricardo 点击了指向 http://www.example.com/cakes/buy 的链接, 然后他的浏览器对你的服务器发出了一个请求。
  2. 路由(route)从URL中解释并提取出这次请求的参数: 控制器(controller), 动作(action)以及其他在这次请求中影响到业务逻辑的所有其他参数。
  3. 使用路由后,请求的URL被映射到一个控制器的动作中(在特定的一个控制器的类的一个方法)。在这个例子,是CakeController类的buy()方法。在控制器的所有动作逻辑执行之前会调用beforeFilter()回调方法(callback)。
  4. 控制器可能会使用模型来处理应用的数据。在这个例子里,控制器使用了一个模型从数据里得到Ricardo上次买的东西。在这次操作中所有 这个模型 适用的回调方法、习惯(behavior)和数据源(DataSource)都可能得到实施。即使模型没有被用到,所有的CakePHP控制器的初始化至 少都需要一个模型。
  5. 当模型取得数据后,数据会被返回到控制器。模型的回调方法可能会被实施。
  6. 控制器可能使用组件对数据进行进一步的加工,或者进行其他的操作(例如会话处理、验证或者发电子邮件)。
  7. 一旦控制器使用了模型和组件以有效地准备数据,就可以使用控制器的set()方法把数据传送到视图(view)。在数据送到视图前,控制 器的回调 方法可能会被实施。视图逻辑会被执行,可能包括了各种元素及(或者)帮助方法。默认情况下,视图会在一个布局(layout)里被渲染。
  8. 附加的控制器回调方法(像afterFilter)可能被实施。最后,完整的经过渲染的视图代码就被送到Ricardo的浏览器了。
 

在 cakephp中,控制器的类名是采用CamelCase的方式进行命名,要建立个用户的控制器,在app/controllers目录下建立 users_controller.php(小写复数形式),如果长名的话使用下滑下连接,如 kisses_and_hugs_controller.php。
users_controller.php控制器中代码的类名为:UsersController
kisses_and_hugs_controller.php控制器中代码的类名为:KissesAndHugsController

php4中,需要加上$name属性,PHP5不需用,为了兼容还是加上吧。


控制器的属性:


1. $name

说明:
PHP4的用户如果要定义控制器必须从$name的属性开始。$name属性是控制器的名字。通常他是控制器主要使用的模块的单词的复数形式。这就解决了CakePHP的命名方式并且避开了PHP4中一些比较奇怪的类名.

PHP 4 返回的类名并不遵循CamelCase(驼峰命名法)格式。如果你因此遇到了问题,使用这个变量来为你的类设置正确的遵循CamelCase格式的名字。 (译注:对于UsersController类,默认情况下Cake将通过CamelCase格式将”UsersController”拆分成” Users”和”Controller”,并以此来定位到与之对应的UserModel,而php 4下面返回很可能是userscontroller(不符合CamelCase),所以导致了问题)

2. $components, $helpers, $uses
    $components 包含的内容为控制器使用的组建。
    $helpers 包含了VIEW使用的插件,也就是小助手
    $uses 包含了模型使用的MODEL模块。

EXP:
class
UsersController extends AppController
{
   $name = " Users";
   $components = array("Session","
Email
"); 使用Session and Email组件。
}


控制器的页面使用的属性:

1.$layout

   说明:设置使用哪个最外层的HTML模版 如果这个属性没有被定义的话,CakePHP会使用默认的页面。如果你没有创建默认页面/app/views/layouts/default.ctp,CakePHP的内核的默认页面会被使用。
2.$pageTitle
   说明:设置页面的标题。
EXP:
class UsersController extends AppController
{
var $name = " Users";
   var $components = array("Session","
Email"); 使用Session and Email组件。
var $helpers = array('Html', 'Ajax');
var $uses = array('Recipe', 'User');
   $this->layout("report.html");
    $this->pageTitle="black8";
}


控制器的参数属性:
主要是使用$params,这个属性里包含了POST或者GET过来的数据
1.$this->params['form'];   
说明:表单的所有数据通过POST方法传递进来都保存在这里,包括$_FILES变量的数据
2.$this->params['controller']
说明:当前请求的控制器名称
3.$this->params['action']
说明:当前请求的动作的名称
4.$this->params['pass']
说明:保存当前请求的GET的查询语句
5.$this->params[‘url’]
返回当前被请求的URL,连同get参数的键值对一起。
EXP:
URL : http://hi.baidu.com/black8/modify/?var1=3&var2=4
$this->params['controller']    ==== black8
$this->params['action'] ==== modify
$this->params['pass'] ==== ?var1=3&var2=4
$this->params[‘url’] ======

  1. [url] => Array  
  2.          (  
  3.              [url] => black8/modify
  4.              [var1] => 3  
  5.              [var2] => 4  
  6.          )

6.$this->data
用来处理来自HTML helper的POST表单数据。(看到助手了再写)

posted @ 2012-02-09 16:58  有梦就能实现  阅读(569)  评论(0编辑  收藏  举报