Laminas MVC 采用松耦合模块化架构,基于 PSR-7/PSR-15 标准,通过 laminas-mvc-skeleton 快速搭建;支持模块创建、路由配置、控制器-模型-视图分离、ServiceManager 依赖注入及多模板引擎扩展。
在 Zend Framework(现为 Laminas)中搭建 MVC 结构,核心是利用其模块化设计和 PSR-7/PSR-15 兼容的中间件机制,而非传统 Zend Framework 1 那种“控制器-视图-模型”硬绑定方式。现代 Laminas(原 Zend Framework 3+)推荐使用 Mezzio(专为 PSR-15 中间件设计的微框架)或 Laminas MVC(保留传统 MVC 风格但更轻量)。下面以 Laminas MVC 为例,说明如何快速搭建一个基础 MVC 应用。
安装并初始化 Laminas MVC 应用
使用 Composer 创建新项目:
- 运行
composer create-project laminas/laminas-mvc-skeleton myapp - 进入项目目录:
cd myapp - 启动内置服务器:
php -S 0.0.0.0:8080 -t public/ public/index.php
访问 http://localhost:8080 即可看到默认欢迎页。骨架已预置了标准 MVC 目录结构:module/(模块)、config/(配置)、public/(入口和静态资源)。
创建一个简单模块(如 Blog 模块)
Laminas MVC 基于模块组织,每个模块独立包含 Controller、Model、View:
- 执行
./vendor/bin/laminas-module-create Blog(需安装laminas/laminas-modulemanager和 CLI 工具) - 模块自动生成在
module/Blog/下,含src/Controller/、config/module.config.php、view/等 - 在
config/modules.config.php中添加'Blog'到模块列表 - 在
module/Blog/config/module.config.php中配置路由,例如匹配/blog到IndexController::indexAction
编写控制器与视图
控制器继承 Laminas\Mvc\Controller\AbstractActionController,返回 ViewModel 或响应对象:
- 编辑
module/Blog/src/Controller/IndexController.php,添加indexAction()方法 - 在该方法中可调用模型(如从
src/Model/PostTable.php获取数据),再用$this->layout()->setVariable('title', 'My Blog')传值 - 对应视图文件放在
module/Blog/view/blog/ind,可直接用
ex/index.phtml= $this->title ?>输出
模型层建议使用 Table Data Gateway + Entity 模式
Laminas 不强制模型实现,但推荐结合 Laminas\Db 实现数据访问:
- 在
module/Blog/src/Model/下创建PostTable.php(封装数据库查询)和Post.php(实体类) - 在
module.config.php中通过ServiceManager配置PostTable工厂,注入AdapterInterface - 控制器中用
$this->serviceLocator->get(PostTable::class)获取实例(或更好:通过构造函数依赖注入)
基本上就这些。Laminas MVC 的 MVC 是松耦合的,控制器不直接操作数据库,视图不写业务逻辑,模型不负责渲染——分工清晰,扩展性强。不需要魔改框架就能支持多模块、API 与页面共存、模板引擎切换(如 Twig、 Plates)等常见需求。

ex/index.phtml






