ShopSuite基于自研的MVC`(Model-View-Controller)`框架的基础上开发,下面的一些概念有必要做下了解,可能在后面的内容中经常会被提及。

入口文件

用户请求的PHP文件,负责处理请求(注意,不一定是HTTP请求)的生命周期,入口文件位于www目录下面,最常见的入口文件就是index.phpShopSuite采用了多应用多入口,你可以给每个应用增加入口文件,例如给后台应用单独设置的一个入口文件admin.php

应用

每个应用是一个app目录的子目录(或者指定的composer库),每个应用具有独立的路由、配置,以及MVC相关文件,这些应用可以公用框架核心以及扩展。而且可以支持composer应用加载。

路由

路由是用于规划(一般同时也会进行简化)请求的访问地址,在访问地址和实际操作方法之间建立一个路由规则 => 路由地址的映射关系。

ShopSuite强制使用路由,路由的核心作用是规范URL,还可以实现验证、权限、参数绑定及响应设置等功能。

控制器

每个应用下面拥有独立的类库及配置文件,一个应用下面有多个控制器负责响应请求,而每个控制器其实就是一个独立的控制器类。

控制器主要负责请求的接收,并调用相关的模型处理,并最终通过视图输出。严格来说,控制器不应该过多的介入业务逻辑处理。

ShopSuite的控制器类需继承基础类库Zero_AppController

一个典型的Index控制器类如下:

<?php if (!defined('ROOT_PATH')) exit('No Permission');
/**
 * @author     Xinze <xinze@live.cn>
 */
class IndexCtl extends Zero_AppController
{
    /**
     * 商城首页
     *
     * @access public
     */
    public function index()
    {
        $data = array();

        $this->render('default', $data);
    }
}

操作

一个控制器包含多个操作(方法),操作方法是一个URL访问的最小单元。

下面是一个典型的Index控制器的操作方法定义,包含了两个操作方法:

<?php if (!defined('ROOT_PATH')) exit('No Permission');
/**
 * @author     Xinze <xinze@live.cn>
 */
class IndexCtl extends Zero_AppController
{
    /**
     * 商城首页
     *
     * @access public
     */
    public function index()
    {
        $data = array();

        $this->render('default', $data);
    }

    public function hello(string $name)
    {
        $data = ['Hello,'.$name];

        $this->render('default', $data);
    }
}

操作方法可以不使用任何参数,如果定义了一个非可选参数,并且不是对象类型,则该参数必须通过用户请求传入,如果是URL请求,则通常是通过当前的请求传入,操作方法的参数支持依赖注入。

模型

模型类通常完成实际的业务逻辑和数据封装,并返回和格式无关的数据。

模型类并不一定要访问数据库,而且在ShopSuite的架构设计中,只有进行实际的数据库查询操作的时候,才会进行数据库的连接,是真正的惰性连接。

ShopSuite的模型层支持多层设计,你可以对模型层进行更细化的设计和分工,例如把模型层分为逻辑层/服务层/事件层等等。

模型类通常需要继承Zero\Model类,一个典型的User模型器类如下:

<?php
class UserModel extends Zero_Model
{
}

视图

控制器调用模型类后,返回的数据通过视图组装成不同格式的输出。视图根据不同的需求,来决定调用模板引擎进行内容解析后输出还是直接输出。

视图通常会有一系列的模板文件对应不同的控制器和操作方法,并且支持动态设置模板目录。

模板引擎

PHP本身就是做好的模板引擎

驱动

系统很多的组件都采用驱动式设计,从而可以更灵活的扩展,驱动类的位置默认是放入核心类库目录下面,也可以重新定义驱动类库的命名空间而改变驱动的文件位置。

中间件

中间件主要用于拦截或过滤应用的HTTP请求,并进行必要的业务处理。

新版部分核心功能使用中间件处理,你可以灵活关闭。包括请求缓存和多语言功能。

事件

在应用中使用事件机制的特性来扩展功能。

文档更新时间: 2020-05-28 09:17   作者:随商信息技术(上海)有限公司