欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

end framework2使用教程【三】–模块目录结构和文件

程序员文章站 2022-05-16 21:24:39
...

上一节,学习如何使用zf2框架链接数据库,并把数据显示在视图中。由于教程较长,所以可能很多人还没有完全理解zf2中模块化开发的意思,以及它的目录结构和文件的意义,因此再用一个教程来对这些进行较详细的讲解。 我们上一节的教程中,在除了默认的applicat

上一节,学习如何使用zf2框架链接数据库,并把数据显示在视图中。由于教程较长,所以可能很多人还没有完全理解zf2中模块化开发的意思,以及它的目录结构和文件的意义,因此再用一个教程来对这些进行较详细的讲解。

我们上一节的教程中,在除了默认的application模块外,添加了一个自定义的模块album,如果你分别访问这两个模块,你会发现它们现实的是不同的内容,它们之间是互相不干扰的。我们再来着重看一下album模块的目录结构:

end framework2使用教程【三】–模块目录结构和文件

config文件夹存放的是含有模块配置信息的php文件,包括控制器和url路由的配置等。

src文件夹存放模块的模型和控制器,在src文件夹中含有一个与模块同名的album文件夹,在album文件夹中又含有存放模型和控制器的文件夹。

view文件夹是存放模块试图脚本的文件夹,注意在这个文件夹中含有一个与模块名称同名的子文件夹中album,在album又含有一个同样的文件夹album,在第二个album文件夹中才存放了视图脚本。

在这个示例中,其实也告诉了我们zf2模块化开发的一般过程。如果你要建立一个新的模块,只需要将album复制一份,然后将对应的文件夹改名,并且将配置文件中的模块、控制器的名称更换即可。下面我再来看一下,zf2的MVC执行流程。

我们访问的首页是http://localhost/zf/public/album/index

album是album模块的album控制器,index是控制器中的indexaction方法,我们看到了,在url中只出现了index,而不是indexaction。这个方法的函数体如下:

public function indexAction()
{
return new ViewModel(array(
'albums' => $this->getAlbumTable()->fetchAll(),
));
}

$this->getAlbumTable()获取album模块的表数据网关对象实例,然后再调用该实例的fetchAll()方法,获取相关数据。

getAlbumTable()的函数体如下:

public function getAlbumTable()
{
if (!$this->albumTable) {
$sm = $this->getServiceLocator();
$this->albumTable = $sm->get('Album\Model\AlbumTable');
}
return $this->albumTable;
}

在这个方法中,将首先获取一个服务管理器的实例-$sm,然后调用服务管理器的get方法来获取album的表数据网关对象的实例。

而’albums’实际上就是被传递给视图脚本的变量名称,它是一个对象数组,更多关于zf2操作数据库并返回值的信息需要查看zf2的官方API文档。

Album\Model\AlbumTable,这里实际上就是调用Album\Model\AlbumTable.php,在AlbumTable.php中有一个名为AlbumTable的类,这就是album模块对应的表数据网关,我们里理解为get方法返回该类的一个实例,并将其赋值给了控制器的属性。

这里再说一下一般MVC框架中的模型的概念。在一般的MVC框架中,是没有表数据网关这个概念的。我们可以简单的将zf2中的表数据网关对应于一般MVC框架的模型,因为在网关中写的就是实际处理数据操作的代码。

而album模型里还有一个文件Album.php,这个文件表示的是Album对象的一个实体。它起的是数据交换【中转】的作用,即把通过数据网关获取的数据赋值给实体。

正因为多了一个模型实体,才显得zf2与其他mvc框架与众不同,大家只要慢慢习惯了这一点,也就好了。

那么站长再列一下zf2的MVC流程:

可以简单地这么认为:

zf2->AlbumController.php->indexaction()->AlbumTable->数据库数据【省去返回箭头,因为返回的是数据】

我们的首页显示,基于的就是这样一个访问流程。

大家如果看完上一节教程,对zf2的执行流程还不够明了的,再看一看这个教程,应该就差不多理解了,其实跟一般地MVC框架差不多,无非就是zf2中的模型有模型实体和表数据网关2部分,其它的是一样的。