• 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表单数据。(看到助手了再写)

  • 相关阅读:
    PCL配置即常见问题
    opencv2.4.9配置+VS2013
    我的项目配置问题及解决
    Java 8 函数式编程
    leecode刷题(17)-- 实现StrStr
    leecode刷题(16)-- 字符串转换整数
    leecode刷题(15)-- 验证回文字符串
    博客迁移通知
    leecode刷题(14)-- 有效的字母异位词
    leecode刷题(13) -- 字符串中的第一个唯一字符
  • 原文地址:https://www.cnblogs.com/firstdream/p/2344206.html
Copyright © 2020-2023  润新知