PHPackages                             luoyue/webman-mvc - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. luoyue/webman-mvc

ArchivedProject[Framework](/categories/framework)

luoyue/webman-mvc
=================

High performance HTTP Service Framework.

1.0.5(1y ago)64MITPHPPHP &gt;=8.2CI passing

Since Jan 5Pushed 1y ago1 watchersCompare

[ Source](https://github.com/luoyue712/webman-mvc)[ Packagist](https://packagist.org/packages/luoyue/webman-mvc)[ Docs](https://www.workerman.net)[ RSS](/packages/luoyue-webman-mvc/feed)WikiDiscussions master Synced 3mo ago

READMEChangelog (6)Dependencies (22)Versions (7)Used By (0)

webman-mvc
==========

[](#webman-mvc)

> webman-mvc 是一个基于 webman 的 mvc 框架，使用composer现有的生态开发，代码规范参考了java的spring框架，开发环境推荐使用 phpstorm 开发。

[![Packagist Version](https://camo.githubusercontent.com/3b684b25a9220c886ab36e2838392a056fbec815f4db0db5294cc3f8c3fe9c9e/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6c756f7975652f7765626d616e2d6d7663)](https://camo.githubusercontent.com/3b684b25a9220c886ab36e2838392a056fbec815f4db0db5294cc3f8c3fe9c9e/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6c756f7975652f7765626d616e2d6d7663)[![Packagist License](https://camo.githubusercontent.com/10a2e93faae46b8ff18b0d97b8a6c437409af7d61fa9047482796310e4c7eed8/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f6c756f7975652f7765626d616e2d6d7663)](https://camo.githubusercontent.com/10a2e93faae46b8ff18b0d97b8a6c437409af7d61fa9047482796310e4c7eed8/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f6c756f7975652f7765626d616e2d6d7663)[![Packagist Dependency Version](https://camo.githubusercontent.com/e98c3f9b84f53a99de7b0b15d78ebccc5e721a58ba7e2080dcb8bb3ef8e7e699/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f646570656e64656e63792d762f6c756f7975652f7765626d616e2d6d76632f706870)](https://camo.githubusercontent.com/e98c3f9b84f53a99de7b0b15d78ebccc5e721a58ba7e2080dcb8bb3ef8e7e699/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f646570656e64656e63792d762f6c756f7975652f7765626d616e2d6d76632f706870)[![GitHub Actions Workflow Status](https://camo.githubusercontent.com/29d5e2aed7f28847ce26d6e6cb5dd09b1167c85e140dba3e8e48caa048552c24/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f6c766c756f7975652f7765626d616e2d6d76632f7068702e796d6c)](https://camo.githubusercontent.com/29d5e2aed7f28847ce26d6e6cb5dd09b1167c85e140dba3e8e48caa048552c24/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f6c766c756f7975652f7765626d616e2d6d76632f7068702e796d6c)[![Codecov](https://camo.githubusercontent.com/d83a93e5c19f586b85bfaeec06541fadea073553f4cbd54de4767ff675f48233/68747470733a2f2f696d672e736869656c64732e696f2f636f6465636f762f632f6769746875622f6c766c756f7975652f7765626d616e2d6d7663)](https://camo.githubusercontent.com/d83a93e5c19f586b85bfaeec06541fadea073553f4cbd54de4767ff675f48233/68747470733a2f2f696d672e736869656c64732e696f2f636f6465636f762f632f6769746875622f6c766c756f7975652f7765626d616e2d6d7663)[![Packagist Downloads](https://camo.githubusercontent.com/b7e294edc81d30b6f5f7027060a5df6cc1257db3b09cc9b0bbb85ddbea7a5633/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6c756f7975652f7765626d616e2d6d7663)](https://camo.githubusercontent.com/b7e294edc81d30b6f5f7027060a5df6cc1257db3b09cc9b0bbb85ddbea7a5633/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6c756f7975652f7765626d616e2d6d7663)[![Packagist Stars](https://camo.githubusercontent.com/ed7d3059096f5b5de710c00ac322b7a8c4c5d9448fa3cff2a545396a71e1ec6b/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f73746172732f6c756f7975652f7765626d616e2d6d7663)](https://camo.githubusercontent.com/ed7d3059096f5b5de710c00ac322b7a8c4c5d9448fa3cff2a545396a71e1ec6b/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f73746172732f6c756f7975652f7765626d616e2d6d7663)

特性
--

[](#特性)

- 支持env配置（[vlucas/phpdotenv](https://github.com/vlucas/phpdotenv)）
- 支持注解开发（[linfly/annotation](https://github.com/imlinfly/webman-annotation)）
- 支持验证器（[topthink/think-validate](https://github.com/top-think/think-validate)）
- 支持依赖注入（[php-di/php-di](https://github.com/PHP-DI/PHP-DI)）
- 支持AOP面向切面编程([luoyue/webman-aop](https://github.com/lvluoyue/webman-aop))
- 支持单元测试（[phpunit/phpunit](https://github.com/sebastianbergmann/phpunit)）
- 支持数据库ORM（[illuminate/database](https://github.com/illuminate/database)）

安装
--

[](#安装)

```
composer create-project luoyue/webman-mvc
```

生产环境时执行以下命令可以减少代码体积。

```
composer update --no-dev
```

启动
--

[](#启动)

### windows环境

[](#windows环境)

```
php windows.php
```

### linux环境

[](#linux环境)

```
php start.php start -d
```

### 二进制启动

[](#二进制启动)

- 请移步至相关[项目仓库](https://github.com/walkor/static-php-cli)查看。
- [自动安装PHP+composer环境](https://www.workerman.net/download)（二进制版）

### docker环境

[](#docker环境)

- 使用官方镜像

    ```
    # 启动容器
    docker run -d -v E:\workerman\test:/opt -p 8787:8787 luoyueapi/webman-mvc
    ```
- 自定义构建镜像

在项目根目录下创建Dockerfile文件，内容如下：

```
FROM php:8.3-zts

# 安装Composer，用于开发环境
#RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
COPY --from=composer /usr/bin/composer /usr/bin/

# 安装必要依赖
RUN apt-get update && apt-get install -y libssl-dev libcurl4-openssl-dev libpq-dev libzip-dev libbz2-dev \
libwebp-dev libjpeg-dev libpng-dev libfreetype6-dev libvpx-dev unzip libevent-dev

# 安装php扩展
RUN docker-php-ext-install pcntl pdo_mysql pdo_pgsql sockets zip bz2 gd
RUN pecl install redis
RUN pecl install -D 'enable-openssl="yes" enable-swoole-curl="yes" enable-http2="yes" enable-swoole-thread="yes"' swoole

# 设置挂载点
VOLUME ["/opt"]

# 设置工作目录
WORKDIR /opt

# 运行webman
ENTRYPOINT ["php", "-d", "extension=swoole", "start.php", "start"]
```

然后运行如下代码进行构建：

```
# 构建镜像
docker build -t webman-mvc .
# 启动容器
docker run -d -v E:\workerman\test:/opt -p 8787:8787 webman-mvc
```

Tips：在使用`phpstorm`开发时，可直接使用运行配置启动`webman-mvc`。

目录结构
----

[](#目录结构)

```
├── app                           应用目录
│   ├── annotation                注解目录
│   ├── controller                控制器目录
│   ├── service                   服务目录
│   ├── model                     模型目录
│   ├── view                      视图目录
│   ├── middleware                中间件目录
│   │   └── StaticFile.php        自带静态文件中间件
│   ├── process                   自定义进程目录
│   │   ├── Http.php              Http进程
│   │   └── Monitor.php           监控进程
│   └── functions.php             业务自定义函数写到这个文件里
├── config                        配置目录
│   ├── app.php                   应用配置
│   ├── autoload.php              这里配置的文件会被自动加载
│   ├── bootstrap.php             进程启动时onWorkerStart时运行的回调配置
│   ├── container.php             容器配置
│   ├── dependence.php            容器依赖配置
│   ├── database.php              数据库配置
│   ├── exception.php             异常配置
│   ├── log.php                   日志配置
│   ├── middleware.php            中间件配置
│   ├── process.php               自定义进程配置
│   ├── redis.php                 redis配置
│   ├── route.php                 路由配置
│   ├── server.php                端口、进程数等服务器配置
│   ├── view.php                  视图配置
│   ├── static.php                静态文件开关及静态文件中间件配置
│   ├── translation.php           多语言配置
│   └── session.php               session配置
├── public                        静态资源目录
├── runtime                       应用的运行时目录，需要可写权限
├── tests                         单元测试目录
├── .env                          环境配置文件
├── start.php                     服务启动文件
├── vendor                        composer安装的第三方类库目录
└── support                       类库适配(包括第三方类库)
    ├── Request.php               请求类
    ├── Response.php              响应类
    ├── helpers.php               助手函数(业务自定义函数请写到app/functions.php)
    └── bootstrap.php             进程启动后初始化脚本

```

业务分层
----

[](#业务分层)

### 1. 控制层 (Controller)

[](#1-控制层-controller)

控制层负责处理来自客户端的请求，接收输入并返回响应。它的主要职责包括：

- 接收和解析 HTTP 请求。
- 调用服务层的相应方法进行业务处理。
- 返回处理结果给客户端，通常是 JSON 格式的数据。
- 处理请求的路由和参数。

### 2. 服务层 (Service)

[](#2-服务层-service)

服务层负责实现具体的业务逻辑，通常包括：

- 处理复杂的业务规则和流程。
- 调用 DAO 层进行数据访问。
- 进行事务管理，确保数据一致性。
- 提供接口供控制层调用，简化控制层的逻辑。

### 3. 事件层 (event)

[](#3-事件层-event)

事件层定义了服务层的通用代码，实现业务模块之间的解耦，如用户注册或者登录后需要做一系列操作。它的主要职责包括：

- 编写服务层可复用的代码。
- 实现业务的单一且独立功能，如用户注册或者登录后需要做一系列操作。

### 4. 验证层 (Validation)

[](#4-验证层-validation)

验证层主要负责对输入数据进行验证，确保数据的有效性和完整性。它的主要功能包括：

- 定义输入数据的验证规则。
- 检查请求参数是否符合预期格式。
- 返回验证错误信息，阻止无效数据进入业务逻辑层。

### 5. 模型层 (Model)

[](#5-模型层-model)

模型层定义了系统的数据结构和业务对象，通常包括：

- 数据模型的定义（例如，用户、订单等）。
- 数据与对象之间的映射关系。
- 可能包含一些与数据相关的业务逻辑。

这种分层架构使得后端系统的各个部分职责明确，便于维护和扩展。每一层都可以独立开发和测试，增强了系统的可读性和可复用性。通过这种结构，开发者可以更容易地管理复杂的业务逻辑和数据操作，从而提高系统的整体性能和稳定性。

env配置
-----

[](#env配置)

- 所有配置项都可以通过.env文件配置。在docker环境中可在运行时指定环境变量，如：`docker run -e SERVER_APP_DEBUG=true webman-mvc`。
- 配置项可自定义，具体使用请看vlucas/phpdotenv或webman官方文档。
- 系统默认配置项在.env.example中，并且是默认值。如需更改请执行如下命令。
- 更多请查看[官方文档](https://github.com/vlucas/phpdotenv)。

```
cp .env.example .env
```

注解处理
----

[](#注解处理)

- 注解使用的是[linfly/annotation](https://github.com/imlinfly/webman-annotation),官方文档仅适用于1.x版本，仅供参考。
- 控制器的文件名的后缀在webman中是需要与配置文件`SERVER_APP_CONTROLLER_SUFFIX`保持一致，但使用注解模式时，则不需要。 不过为了项目规范，建议使用控制器后缀。

### 控制器注解

[](#控制器注解)

- 控制器类必须包含`#[Controller]`注解，如：`#[Controller("/api")]`。
- 方法必须包含方法注解, 如：`#[GetMapping("index")]`。
- 示例:在`app/controller`中新建文件`TestController.php`如下代码

```
