📜  Zend框架-MVC架构(1)

📅  最后修改于: 2023-12-03 15:35:49.614000             🧑  作者: Mango

Zend框架-MVC架构

Zend框架是一款开源的基于PHP语言的Web应用程序开发框架,采用MVC架构模式。MVC是一种把应用程序分成三个核心部分的软件设计模式,分别是模型(Model)、视图(View)、控制器(Controller)。

模型(Model)

模型是指与应用程序的业务逻辑相关的数据和规则,负责处理数据的存储、检索、验证和操作。MVC架构中的模型就是针对数据库中数据进行操作并封装成对象,供控制器调用。Zend框架采用Zend\Db进行数据库操作,提供了一系列的类和方法,同时也支持其他的数据库操作方式。

视图(View)

视图是指把数据呈现给用户的界面,即用户看到的界面。视图不仅是HTML页面,还可以是JSON、XML、PDF等任何格式的文档。在MVC架构中,视图负责呈现模板、数据和样式,通常采用模板引擎来处理。Zend框架的视图层使用Zend\View组件,提供了视图对应的API和方法,同时也支持多种模板引擎。

控制器(Controller)

控制器是MVC架构中与用户交互的部分,它接收用户请求并处理,调用模型层的逻辑处理,最后返回呈现给用户的视图。在Zend框架中,控制器是MVC三个组件之间的协调者,它负责从URL中获取请求参数,根据请求参数调用不同的模型和视图,并返回最终的HTML页面。Zend框架的控制器采用Zend\Mvc组件,提供了控制器对应的API和方法。

框架特点
  • Zend框架是一款开源、模块化的框架,可以根据业务需求自由选择需要的组件,避免了不必要的依赖。
  • Zend框架采用MVC架构,各个组件职责明确,有利于代码的维护和扩展。
  • Zend框架提供了丰富的类和方法库,可直接调用,也方便了程序员二次开发。
  • Zend框架可以适配多种数据库、多种模板引擎,支持多种格式的数据输出,给用户良好的体验。
示例代码
// 以下是Zend框架中使用MVC架构的示例代码

// 模型层,使用Zend\Db操作数据库
namespace Album\Model;

use Zend\Db\TableGateway\TableGateway;

class AlbumTable
{
    protected $tableGateway;

    public function __construct(TableGateway $tableGateway)
    {
        $this->tableGateway = $tableGateway;
    }

    public function fetchAll()
    {
        $resultSet = $this->tableGateway->select();
        return $resultSet;
    }
}

// 视图层,使用Zend\View处理视图界面
namespace Album\View;

use Zend\View\Model\ViewModel;

class AlbumViewModel extends ViewModel
{
    protected $template = 'album/view';

    public function __construct()
    {
        $this->setVariables(array(
            'title' => 'My Music Albums',
            'albums' => array(
                array('id' => 1, 'artist' => 'Queen', 'title' => 'A Night at the Opera'),
                array('id' => 2, 'artist' => 'Led Zeppelin', 'title' => 'IV'),
                array('id' => 3, 'artist' => 'Pink Floyd', 'title' => 'The Wall'),
            ),
        ));
    }
}

// 控制器层,使用Zend\Mvc处理用户请求和响应
namespace Album\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Album\Model\AlbumTable;
use Album\View\AlbumViewModel;

class AlbumController extends AbstractActionController
{
    protected $albumTable;

    public function __construct(AlbumTable $albumTable)
    {
        $this->albumTable = $albumTable;
    }

    public function indexAction()
    {
        $albums = $this->albumTable->fetchAll();
        $viewModel = new AlbumViewModel();
        $viewModel->setVariable('albums', $albums);
        return $viewModel;
    }
}