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

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

时间:2022-11-08 23:32:18浏览次数:87  
标签:教程 posts 控制器 博客 视图 Post CakePHP


 

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

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

  • ​​CakePHP2十分钟博客教程(一):安装与配置​​
  • ​​CakePHP2十分钟博客教程(二):控制器、模型与视图​​
  • ​​CakePHP2十分钟博客教程(三):数据库基础操作、表单、路由器​​

创建博客数据库表

在上篇教程的数据库配置中,我们为当前的博客程序创建了一个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框架博客教程系列第三篇,动态添加,修改,删除博客文章。

标签:教程,posts,控制器,博客,视图,Post,CakePHP
From: https://blog.51cto.com/u_3457306/5835081

相关文章

  • 博客园美化教程指引
    展示博客园首页美化效果    展示博客园文章美化效果  简单介绍: 本美化是基于博客园皮肤==> SimpleMemory所进行的,以下会给出可靠的指引,根据指引完成......
  • 【视频教程】Dart编程语言基础入门教程 - 09日期时间
    Dart语言是谷歌团队开发的一款支持多平台(web、IOS、安卓)的全栈性语言,他也可以在前端,后端,服务器端上进行各种开发应用,是个不错的语言,目前也有一些公司在开始慢慢尝试着用它来......
  • django视图
    一、简介视图是Django应用程序中的一种网页“类型”,通常提供特定功能并具有特定模板,在Django中,网页和其他内容是通过视图传递的。每个视图都由一个Python函数(或方法......
  • Shell脚本入门全套教程
    1、> 输出正确的输出 -覆盖  2> 输出错误的输出 -覆盖  &> 输出正常和错误的信息-覆盖  >> 追加   grep过滤数据  clear清频幕  vim ......
  • 【详细教程】一文参透MongoDB聚合查询
    MongoDB聚合查询什么是聚合查询聚合操作主要用于处理数据并返回计算结果。聚合操作将来自多个文档的值组合在一起,按条件分组后,再进行一系列操作(如求和、平均值、最大值、最......
  • 【JavaScript 教程】第四章 程序流程08— JavaScript continue 语句
    英文 | https://www.javascripttutorial.net/译文|杨小爱在上节中,我们学习了JavaScript 程序流程中的break语句,错过的小伙伴可以点击文章《​​【JavaScript教程】第......
  • 【JavaScript 教程】第四章 程序流程06— JavaScript for 循环
    英文 | https://www.javascripttutorial.net/译文|杨小爱在上节中,我们学习了JavaScript 程序流程中的dowhile语句,错过的小伙伴可以点击文章《​​【JavaScript教程】......
  • 【JavaScript 教程】第四章 程序流程07— JavaScript break 语句
    英文 | https://www.javascripttutorial.net/译文|杨小爱在上节中,我们学习了JavaScript 程序流程中的for循环语句,错过的小伙伴可以点击文章《​​【JavaScript教程】......
  • 【JavaScript 教程】第二章基础知识03—JavaScript 数据类型
    英文 | https://www.javascripttutorial.net/译文|杨小爱在上节中,我们学习了JavaScript的变量,错过的小伙伴可以点击文章《​​【JavaScript教程】第二章基础知识02—Ja......
  • 【适合小白教程】 喜马拉雅电台声音下载到电脑本地进行播放!
    前段时间有个需求,想把一个喜欢的主播喜马拉雅的声音下载到笔记本电脑上进行本地播放。不过有个问题,就是喜马拉雅软件并不支持直接下载声音文件到电脑本地,所以这就成了一个......