`
dcj3sjt126com
  • 浏览: 1871027 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

CakePHP 2.x十分钟博客教程(二):控制器、模型与视图

    博客分类:
  • PHP
阅读更多

 

在上篇CakePHP教程中,为大家介绍了CakePHP的安装与配置过程。你的CakePHP框架现在应该已经能够建立应用程序了,本文为大家带来CakePHP如何创建控制器、模型及视图文件,并将其关联起来,最终构建一个数据库驱动的博客程序。

CakePHP系列教程—CakePHP博客三部曲:

创建博客数据库表

在上篇教程的数据库配置中,我们为当前的博客程序创建了一个cakephp2的数据库,这里我们继续使用该数据库进行博客开发。首先建立博客程序的表,如下代码所示。

CREATE TABLE posts (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(50),
body TEXT,
created DATETIME DEFAULT NULL,
modified DATETIME DEFAULT NULL
);

上 面的表结构应该是最简单的博客文章表结构了,id为递增主键,用来标识博客的唯一标示符。title字段为博客的文章名,body字段为文章主 题,created及modified分别是该篇博客的创建时间与修改时间。在任意MySQL客户端工具中运行如上代码。接着,插入如下数据。

INSERT INTO posts (title,body,created)
VALUES (‘The title’, ‘This is the post body.’, NOW());
INSERT INTO posts (title,body,created)
VALUES (‘A title once again’, ‘And the post body follows.’, NOW());
INSERT INTO posts (title,body,created)
VALUES (‘Title strikes back’, ‘This is really exciting! Not.’, NOW());

一切正常的话,posts表中现在应该有三行数据了。这里指的注意的是,posts表名为复数!它的命名并非是随意选择的!关于CakePHP框架的命名规范,以及遵循规范能带来何种效果,务必查看《CakePHP命名规范》一文!这里就不在多说了。

创建Post模型

通过上面建立的数据库,我们可以为博客程序建立相应的Post模型了。通过建立Post模型,稍后我们可以在视图层中创建显示,添加,修改,删除博客文章的逻辑。

CakePHP框架的模型文件位于/app/Model/目录中,在该路径下创建Post.php文件,并复制如下内容到该文件中。

01
02
03
class Post extends AppModel {
    public $name = ‘Post'
}

再一次提醒大家,命名规范对于CakePHP框架十分重要。通过命名模型为Post,CakePHP能够自动关联该模型到PostsController控制器以及上面创建的posts表。

PS:如果CakePHP无法在/app/Model/路径下找到相应的模型文件,它会在需要时动态创建一个模型对象。假如你的模型文件命名出现问题,CakePHP是无法查找到该文件的,所以你在该文件中做的任何模型设置,都无法生效。

博客的模型层创建完毕,就是这么简单,如果想了解CakePHP框架更多关于模型层的知识,如表前缀,回调函数,字段验证,可以查看CakePHP官方手册中关于模型的章节。

创建Posts控制器

模 型层对我们的博客来说,只包含了底层的数据设计及交互能力。我们需要为博客创建一个控制器,以便于控制博客的各种逻辑,并且可以在浏览器中访问。 CakePHP的控制器文件位于/app/Controller/目录中,在该路径下创建PostsController.php文件。并赋值如下内容到 该文件中,

01
02
03
04
class PostsController extends AppController {
    public $name = 'Posts';
    public $helpers = array('Html', 'Form');
}

接 着,为Posts控制器添加一个方法控制器方法,用于显示所有的文章列表。举个例子来说,当用户访问www.example.com/posts /index(或者www.example.com/posts/),他可能想看到博客文章列表。添加如下index方法到 PostsController控制器中:

01
02
03
public function index() {
    $this->set('posts', $this->Post->find('all'));
}

我 们需要对该段代码做些解释,通过在CakePHP控制器中建立一个方法,用户可以通过浏览器访问相对应的页面。如上述PostsController控制 器中的index()方法,用户可以访问www.example.com/posts/index来访问该方法对应的页面。你可以建立任意你需要的方法让 用户访问,比如说你在PostsController中建立了一个ruiwant()方法,则可以通过www.exampler.com/posts /ruiwant进行访问。

PS:你可能会想,通过控制器和方法命名,可以获得更利于SEO优化的URL地址。这种想法不错,但是前提是要遵守CakePHP命名规则

index() 方法中调用了set()方法,该方法用于从控制器中传递数据到视图文件。上述代码的意思是,在视图中创建一个posts变量,该变量被赋予参数二的 值。$this->Post用于在PostsController控制器中获取Post模型实例,再通过find()方法,获取Posts模型中所 有的记录,并以数组形式返回。

 创建视图文件

目前为止,我们通过模型定义了数据模型,通过控制器定义了应用程序逻辑及流程,是时候为index()方法创建一个视图文件了。

CakePHP的视图(View)文件全部包含在布局文件(Layout)内部,对于多数的应用来说,视图包含HTML+PHP代码,不过,它们也可能通过XML、CSV等形式输出。在本教程中,布局文件一律使用CakePHP系统内置的默认布局。

各位应该还记得,在控制器index()方法中,我们通过set()方法将posts变量传递到了视图文件中。如果在视图文件中var_dump该变量的话,会得到如下数组格式。

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Array
 (
 [0] => Array
 (
     [Post] => Array
     (
     [id] => 1
     [title] => The title
     [body] => This is the post body.
     [created] => 2008-02-13 18:34:55
     [modified] =>
     )
 )
 [1] => Array
 (
     [Post] => Array
     (
     [id] => 2
     [title] => A title once again
     [body] => And the post body follows.
     [created] => 2008-02-13 18:34:56
     [modified] =>
     )
 )
 [2] => Array
 (
     [Post] => Array
     (
     [id] => 3
     [title] => Title strikes back
     [body] => This is really exciting! Not.
     [created] => 2008-02-13 18:34:57
     [modified] =>
     )
 )
 )

CakePHP的视图文件存放在/app/View/文件夹中,和模型与控制器不同的是,视图文件需要根据控制器名放在不同的文件夹中。例如PostsController控制器对应的视图文件,应该位于/app/View/Posts/文件夹中。创建index.ctp视图文件在上述目录中,赋值如下内容到该文件中。

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
<!-- File: /app/View/Posts/index.ctp -->
<h1>Blog posts</h1>
<table>
    <tr>
        <th>Id</th>
        <th>Title</th>
        <th>Created</th>
    </tr>
 
<!-- Here is where we loop through our $posts array, printing out post info -->
 
    <?php foreach ($posts as $post): ?>
    <tr>
        <td><?php echo $post['Post']['id']; ?></td>
        <td>
            <?php echo $this->Html->link($post['Post']['title'],
array('controller' => 'posts', 'action' => 'view', $post['Post']['id'])); ?>
        </td>
        <td><?php echo $post['Post']['created']; ?></td>
    </tr>
    <?php endforeach; ?>
</table>

该段代码相当简单,就是HTML+PHP混合文件。一起来简单分析下它们。代码第16行,可以看到我们通过$this->Html实例化了Html助手类(HtmlHelper),接着通过link()方法生成一个HTML链接,参数一是链接显示文字,参数二是链接地址。除此之外,CakePHP框架默认集成了许多的视图助手,例如,表单、JS以及Ajax等。

传送门:CakePHP助手类官方手册

在CakePHP框架中指定URL地址,官方手册中提到的最佳实践是通过数组形式指定,这样做的好处会在CakePHP路由一节中做更详细的解释。总得来说,使用数组形式组织CakePHP的URL,可以充分利用该框架路由系统提供的强大功能。

好了,完成上述代码之后,打开浏览器,访问www.example.com/posts/index应该能看到你的博客内容全部显示在页面上了,由于使用了CakePHP的默认布局文件及样式文件,可以看到页面还是蛮漂亮的。

总结

本节教程也到此结束了,在构建博客的数据库之后,通过正确的命名规范,CakePHP框架会自动将模型与数据库关联起来,同样根据命名规范以及文件系统结构,CakePHP框架能够自动判断模型,控制器与视图文件之间的联系与位置。

从模型中读取文件,在控制器中控制逻辑,赋值并调用相应的视图文件只是第一步,在下一节教程中,会给大家介绍CakePHP框架博客教程系列第三篇,动态添加,修改,删除博客文章。

分享到:
评论

相关推荐

    cakephp 1.3.x 中文手册

    cakephp 1.3.x 中文手册,部分英文没有翻译,随后翻译。

    CakePHPV2.X手册

    #### 二、分层开发与模型视图控制器(MVC) - **添加层次**:通过本节内容,读者将了解如何在博客应用中增加新的功能,例如发布文章、数据验证等。 - **创建 Post 模型**:模型是数据访问和业务逻辑的核心部分,...

    CAKEPHP CMS教程.pdf

    2. MVC设计模式:在CAKEPHP中,MVC模式是基础,模型(Model)代表数据和业务逻辑,视图(View)是用户界面,控制器(Controller)是模型和视图之间的中介。用户交互触发控制器,控制器调用模型进行数据处理,然后将结果...

    cakephp-1.3.21.zip

    视图与控制器紧密协作,根据控制器传递的数据生成页面。 3. Controller(控制器):作为模型和视图的桥梁,处理用户的请求,调用模型进行数据操作,并将结果传递给视图进行渲染。 二、CakePHP 1.3.21特性 1. 数据...

    CakePHP1.2.3.8166.7z CakePHP最新稳定版

    在CakePHP中,模型(Model)负责处理数据库操作和业务逻辑,视图(View)用于渲染数据并呈现给用户,控制器(Controller)则协调模型和视图,处理用户的请求。这种设计使得代码结构清晰,易于维护和扩展。 二、....

    CakePHP 1.2.1.8004 Stable版本下载

    2. **烤箱(Bake)**:一个内置的代码生成工具,可以帮助快速创建模型、控制器、视图和测试用例,加速开发过程。 3. **ActiveRecord**:模型类自动与数据库表关联,简化了数据操作。 4. **安全功能**:包括CSRF(跨...

    cakephp-pretty-debug:CakePHP 2.x的PrettyDebug插件

    CakePHP 2.x的PrettyDebug插件要求CakePHP 2.x CakePHP DebugKit插件安装有关常规帮助,请参见CakePHP文档中的“”。 将PrettyDebug目录放入您的插件目录中,或从composer.json文件所在的目录中的安装插件: ...

    CakePHP v2.3.0.zip

    **蛋糕PHP(CakePHP)** 是一个基于模型-视图-控制器(MVC)模式的开源PHP框架,它旨在简化Web应用的开发过程并提高效率。 CakePHP v2.3.0是该框架的一个特定版本,发布于2012年,提供了许多改进和新特性,使得...

    Thumbs:CakePHP 2.x的Thumbs插件

    CakePHP 2.x的Thumbs插件 该插件可让您从网站上的任何公共图片创建大拇指。 #入门 首先将这个插件分叉或克隆到CakePHP 2.x项目中; 使用插件的路由器将此插件加载到您的bootstrap.php文件中。 CakePlugin :: load...

    CakePHP 框架模板 v2.02

    2. **创建项目**:使用cake bake命令快速生成基本的MVC结构,包括控制器、模型、视图等。 3. **数据库连接**:配置数据库连接,建立数据模型并同步到数据库。 4. **开发业务逻辑**:在控制器中编写处理用户请求的...

    cakephp最新开发文档

    模型负责业务逻辑和数据管理,视图负责呈现用户界面,而控制器处理用户请求并协调模型和视图之间的交互。 2. **安装 CakePHP**:安装过程相对简单,通常涉及下载框架的核心库和创建应用程序的结构。解压后,蛋糕PHP...

    cakephp中文手册.pdf

    3. **Controller(控制器)**:作为模型和视图之间的桥梁,处理用户请求,调用模型处理业务逻辑,然后将结果传递给视图进行展示。 在 CakePHP 中,MVC模式被实现得非常直观和易于使用。例如,控制器类通常放在`app/...

    cakelte:CakePHP 4.x的AdminLTE插件

    CakeLTE:CakePHP 4.x的AdminLTE插件 安装 您可以使用将此插件安装到CakePHP应用程序中。 推荐的安装作曲家软件包的方法是: composer require arodu/cakelte 依存关系 ,在CakePHP 4中透明地使用Bootstrap 4。 ...

    packtpub.CakePHP.1.3.Application.Development.Cookbook.Mar.2011

    2. **CakePHP 基础**:掌握 MVC 架构概念,理解模型(Model)、视图(View)和控制器(Controller)之间的交互。学习 CakePHP 的核心组件,如路由(Routing)、模型关联(Associations)、数据验证(Validation)和...

    CakePHP PHP MVC框架

    5. ** Bake工具**:命令行工具,可以自动生成模型、控制器、视图文件,加快开发速度。 6. **插件和组件**:丰富的社区插件和组件库,扩展功能易如反掌。 7. **错误处理和日志记录**:强大的异常处理和日志系统,便于...

    cakephp2.x-filter-search-example:一个简单的示例,说明如何在cakephp 2.x上过滤和搜索分页列表

    在本文中,我们将深入探讨如何在CakePHP 2.x框架中实现过滤和搜索功能,以创建一个具有分页的动态用户界面。 CakePHP是基于MVC(模型-视图-控制器)架构的PHP开发框架,它提供了一套强大的工具来简化Web应用的开发。...

    通过使用HTML5BoilerPlate构建的社区最佳实践集合来提升您的CakePHP烘焙.zip

    CakePHP,另一方面,是一个基于MVC(模型-视图-控制器)架构的PHP框架,它简化了Web应用程序的开发流程,提供了强大的数据库操作和丰富的组件。CakePHP的特点包括: 1. **快速开发**:通过约定优于配置的原则,...

    IMCake:CakePHP 2.x 插件使用 CakePHP 模型与 INTER-Mediator 一起工作

    蛋糕 IMCake 是 CakePHP 2.x 的一个插件,用于使用 CakePHP 模型与 INTER-Mediator 一起工作。 要更熟悉 INTER-Mediator,请访问: : 注意该产品应被视为正在进行中的工作,请自行承担风险进行测试和使用,并反馈您...

    AclManager:用于管理 CakePHP 2.x 的 Acl 的插件

    用于 CakePHP 2.x 的 AclManager 该插件允许您通过 Acl 模块轻松管理 CakePHP 2.x 中的权限。 从更新和修复原始源 特征 管理每个节点的权限 更新缺少 ARO(用户、角色等)的数据库 更新缺少 ACO 的数据库(控制器...

Global site tag (gtag.js) - Google Analytics