上一篇文章中我们一起研究学习了yaf的简单工作流程与控制器以及视图部分,然后在视图模板中打印输出了:hello,Controller!,也就是通过输出hello,Controller!的例子,我们把MVC中的,C与V过了一遍。还有M我们没有详细学习,那么今天我们一起来研究学习一下M吧,那么现在就开始吧。
我眼中的MVC
在开始之前,我想和大家一起聊聊我所认识的mvc三层架构。mvc这个概念在互联网上众说纷纭,有好多种说法。
那么我和大家来分享一下我对mvc的认识:
- M(模型)模型是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。比如:1)接收控制器传过来的数据然后进行处理,返回给控制器。2)进行数据存储,封装一些数据存储过程。以接口的形式暴露给程序员,提高编码效率。
- V(视图)视图模型主要的任务是:进行数据渲染,接收用户请求等
- C(控制器)主要是用于处理用户的交互。一般是通过视图接收用户传输过来的数据进行处理,并向模型发送数据。然后接收到模型发送过来的数据渲染给视图层。
以上就是我对mvc的一些认识。那么我们现在一起看看yaf的model吧。
model
鸟哥在手册中已经说过,model类建议存放在:application/models,那么我们现在就打开我们的文件夹来看看,这个目录下面的Sample.php。
细说Sample.php
我们一起来看看Sample.php里面有些什么:
<?php
/**
* @name SampleModel
* @desc sample数据获取类, 可以访问数据库,文件,其它系统等
* @author mateng
*/
class SampleModel {
public function __construct() {
}
public function selectSample() {
return 'Hello World!';
}
public function insertSample($arrInfo) {
return true;
}
}复制代码
我们现在看到的前面几行是一些注释,虽然是注释,但是对我们了解框架,了解程序有很大的帮助,那么我们现在看看鸟哥在这里对我们说了些什么:
- @name SampleModel 首先是这个类的名字,从命名规则可以看出命名方式为:文件名+Model组成的。如:User.php的类名应该是:UserModel。
- @desc sample 这个类的一些说明,如:获取数据、处理文件等。
我们继续看下面,下面就是我们的代码主体了,在这里它没有继承其他类,而且类名的命名方式是:驼峰式命名法。
那么我们看看这个model类里面有些什么方法:
- 首先我们看到里面是一个构造方法,然后在这里我们可以加载一些类或者配置文件等。
- 接下来是selectSample()方法,看这个意思不用多说肯定就是数据的查询了。
- 最后还有一个insertSample()方法,这个方法传入了一个数组:$arrInfo 这个方法看字面意思是写入数据等操作。
我们现在大致了解了Sample这个类了,以及他的写法,那么我们现在创建一个新的类。就取名User.php吧。
创建User.php
我们现在在models目录下面创建一个User.php文件,里面写一个类,而且类的名字是文件名+Model。我们看目录结构:
现在我们打开 Hello.php ,然后在 indexAction方法中我们 new UserModel();。看代码:
<?php
/**
* Created by PhpStorm.
* User: mateng
* Date: 2017/11/10
* Time: 上午12:08
*/
class HelloController extends Yaf_Controller_Abstract {
public function indexAction($name = "Stranger") {
$model = new UserModel();
exit;
$this->getView()->assign("content", "Hello,Controller!");
return TRUE;
}
}复制代码
然后我们在User.php这个model类中在添加一个select方法,return一个数组:
public function selectUser(){
return ['id' => 1,'name' => 'perma'];
}复制代码
然后我们在Hello.php控制器中调用这个方法:
$model = new UserModel();
var_dump($model->selectUser());
exit;复制代码
然后我们运行:http://localhost/lbxd/public/index.php/index/hello/index