杰瑞科技汇

PHP Zend框架怎么学?入门教程有哪些?

Zend Framework 和 Laminas

你需要了解一个非常重要的历史节点:

PHP Zend框架怎么学?入门教程有哪些?-图1
(图片来源网络,侵删)
  1. Zend Framework 2 (ZF2)Zend Framework 3 (ZF3) 是由 Zend 公司主导的开源 PHP 框架。
  2. 2025 年,Zend 公司将其核心团队和项目转移到了一个名为 Laminas 的非营利性基金会。
  3. Zend Framework 3 是最后一个由 Zend 公司发布的版本
  4. 之后,所有的新开发都在 Laminas Project 下进行,它现在是 The PHP Framework Interop Group (PHP-FIG) 的一部分,更现代、更灵活。
  5. 现在如果你要学习 "Zend",你实际上有两个选择:
    • 学习 Laminas: 这是当前推荐的方向,它继承了 Zend Framework 的精髓,但采用了更现代的架构和依赖注入管理,并且与 PSR 标准高度兼容,Laminas 官方文档是首选。
    • 学习 Zend Framework 3: 如果你需要维护一个旧的 ZF3 项目,或者想了解其经典架构,可以学习 ZF3,但请注意,它已经不再积极开发。

本教程将以 Laminas 为核心进行讲解,因为它代表了未来的方向。 我们会穿插说明 ZF3 与 Laminas 的主要区别。


第一部分:Laminas 框架核心概念

在开始写代码之前,理解 Laminas 的几个核心概念至关重要。

MVC 架构模式

Laminas 是一个基于 MVC (Model-View-Controller) 设计模式的框架。

  • Model (模型): 负责数据和业务逻辑,它通常与数据库交互,处理数据的增删改查,在 Laminas 中,你可能会使用 Doctrine 这样的 ORM 来创建模型。
  • View (视图): 负责展示数据,它通常是 HTML 模板文件,其中混合了 PHP 代码(或模板引擎如 Twig)来显示从 Controller 传递过来的数据,视图文件位于 module/Application/view/application/ 目录下。
  • Controller (控制器): 作为 Model 和 View 之间的桥梁,它接收用户的请求(通过 URL),调用相应的 Model 处理数据,然后将数据传递给 View 进行渲染,最后将响应返回给用户,控制器是应用的核心逻辑所在。

模块化

Laminas 应用是由多个模块 组成的,每个模块都是一个自包含的 MVC 应用,可以有自己的控制器、视图、模型和配置,这使得大型应用的结构非常清晰,便于维护和复用。

PHP Zend框架怎么学?入门教程有哪些?-图2
(图片来源网络,侵删)
  • Application 模块是默认模块,处理应用的基本路由和配置。
  • 你可以创建自己的模块,Blog, User 等。

依赖注入

这是现代框架的核心,在 Laminas 中,你不需要手动 new 一个对象,相反,你向“容器”(一个管理所有对象的服务管理器)声明你需要什么,容器会自动为你创建并注入依赖。

  • 优点: 解耦代码、易于测试、配置集中管理。
  • 实现:通过 config/config.phpmodule.config.php 来配置哪些类需要被容器管理。

路由

路由决定了 URL 如何映射到具体的 Controller 和 Action。

  • 一个 URL http://example.com/blog/post/1 可能会被路由到 Blog 模块的 PostController 控制器的 viewAction 方法,并将 1 作为参数传递。

中间件

中间件是处理 HTTP 请求和响应的“层”,你可以把它想象成一个流水线,请求和响应依次通过每个中间件,每个中间件都可以做一些处理(比如认证、日志记录、CORS 等),Laminas 完全支持 PSR-15 中间件标准。


第二部分:实战教程 - 搭建你的第一个 Laminas 应用

我们将使用 Composer 来安装和管理 Laminas 项目。

PHP Zend框架怎么学?入门教程有哪些?-图3
(图片来源网络,侵删)

步骤 1: 安装 Composer

如果你还没有安装 Composer,请先从 getcomposer.org 下载并安装。

步骤 2: 创建 Laminas 项目

打开你的终端,运行以下命令:

composer create-project laminas/laminas-skeleton-application my-laminas-app
  • laminas/laminas-skeleton-application 是 Laminas 的官方项目骨架。
  • my-laminas-app 是你创建的项目目录名。

安装完成后,进入项目目录:

cd my-laminas-app

步骤 3: 启动开发服务器

Laminas 提供了一个内置的开发服务器,方便本地开发。

composer run -- -s development

或者,你也可以使用 PHP 内置的 Web 服务器:

php -S localhost:8088 -t public/

在浏览器中访问 http://localhost:8088,你应该能看到 Laminas 的欢迎页面。

步骤 4: 探索项目结构

理解项目结构是学习的第一步,主要目录如下:

my-laminas-app/
├── config/              # 全局配置文件
│   ├── config.php       # 合并所有模块配置的入口
│   ├── autoload/        # 自动加载配置
│   └── modules.config.php # 启用的模块列表
├── module/              # 所有模块目录
│   └── Application/     # 默认的 Application 模块
│       ├── config/      # Application 模块的配置
│       ├── src/         # 源代码
│       │   ├── Controller/ # 控制器
│       │   └── ...      # 其他类
│       └── view/        # 视图文件
│           └── application/ # Application 模块的视图
│               ├── layout/   # 布局模板
│               └── index/    # 控制器视图
├── public/              # Web 根目录,唯一能被外部访问的目录
│   ├── index.php        # 前端控制器入口
│   └── .htaccess        # Apache 重写规则,将所有请求指向 index.php
├── vendor/              # Composer 依赖包
└── composer.json        # 项目依赖定义

步骤 5: 创建一个自定义模块

我们将创建一个简单的 Hello 模块。

创建模块目录和基本结构

# 在 module 目录下创建 Hello 目录
mkdir module/Hello
# 创建必要的子目录
mkdir module/Hello/{config,src,view}
mkdir module/Hello/src/Controller
mkdir module/Hello/view/hello

创建模块类

文件: module/Hello/src/Module.php

<?php
namespace Hello;
class Module
{
    public function getConfig()
    {
        return include __DIR__ . '/../config/module.config.php';
    }
}

创建模块配置

这个文件定义了模块的路由、控制器、视图管理器等。

文件: module/Hello/config/module.config.php

<?php
return [
    'controllers' => [
        'factories' => [
            Controller\IndexController::class => InvokableFactory::class,
        ],
    ],
    'router' => [
        'routes' => [
            'hello' => [
                'type'    => 'Segment',
                'options' => [
                    'route'    => '/hello[/:action]',
                    'constraints' => [
                        'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                    ],
                    'defaults' => [
                        'controller' => Controller\IndexController::class,
                        'action'     => 'index',
                    ],
                ],
            ],
        ],
    ],
    'view_manager' => [
        'template_path_stack' => [
            __DIR__ . '/../view',
        ],
    ],
];

创建控制器

文件: module/Hello/src/Controller/IndexController.php

<?php
namespace Hello\Controller;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\ViewModel;
class IndexController extends AbstractActionController
{
    public function indexAction()
    {
        // 你可以在这里获取数据,比如从数据库
        $message = 'Hello, Laminas World!';
        // 创建一个 ViewModel 并将数据传递给视图
        return new ViewModel([
            'message' => $message,
        ]);
    }
}

创建视图

文件: module/Hello/view/hello/index/index.phtml

<h1>Hello Module</h1>
<p><?= $this->escapeHtml($this->message) ?></p>

启用新模块

编辑 config/modules.config.php,将你的 Hello 模块添加到列表中。

<?php
return [
    'Application',
    'Hello', // 添加这一行
];

访问新模块

重启你的开发服务器,然后在浏览器中访问 http://localhost:8088/hello,你应该能看到 "Hello, Laminas World!" 的字样。


第三部分:进阶主题

数据库集成与 Doctrine ORM

Laminas 本身不包含数据库抽象层,但它与 Doctrine ORM 集成得非常好。

  • 安装 Doctrine:
    composer require laminas/laminas-db laminas/laminas-form doctrine/doctrine-orm-module
  • 配置: 你需要在 config/autoload/{,*.}global.php 中配置数据库连接和 Doctrine。
  • 创建实体: 定义你的数据模型(如 User, Post),它们是普通的 PHP 类。
  • 使用仓储: 在控制器中,你可以通过依赖注入获取实体仓储,然后进行数据库操作。

表单处理

Laminas 提供了强大的表单组件。

  • 创建表单类: 继承 Laminas\Form\Form,定义表单元素(文本框、按钮等)和验证器。
  • 在控制器中使用: 处理 GET 请求(显示表单)和 POST 请求(验证和保存数据)。
  • 在视图中渲染: 使用 form 视图助手轻松渲染整个表单或单个元素。

认证与授权

  • 认证: 验证用户身份(“你是谁?”),Laminas 提供了 Laminas\Authentication 组件,支持多种适配器(数据库、HTTP Basic、OAuth 等)。
  • 授权: 验证用户是否有权限执行某个操作(“你能做什么?”),Laminas 提供了基于角色的访问控制,可以精细地控制控制器、Action 甚至视图元素的访问权限。

第四部分:学习资源

  1. 官方文档 (最重要)

  2. 视频教程

    • LaminasCast: https://laminascast.com/ - 专门针对 Laminas 的视频教程系列。
    • Maksym Solin's YouTube Channel: 他有很多高质量的 Laminas 教程。
  3. 社区

    • Laminas Slack: https://laminas.dev/slack/ - 官方聊天频道,遇到问题可以在这里提问。
    • Stack Overflow: 使用标签 laminas-framework 提问。

总结与建议

  • 从 Laminas 开始: 忘记旧的 Zend Framework,直接学习 Laminas。
  • 重视官方文档: Laminas 的文档写得非常好,是学习框架的最佳途径。
  • 实践出真知: 不要只看教程,跟着动手创建自己的项目,从最简单的 CRUD 应用开始,逐步增加功能。
  • 理解核心概念: MVC、依赖注入、路由是现代框架的基石,务必花时间理解透彻。
  • 拥抱 PSR 标准: Laminas 与 PSR 标准(如 PSR-7 HTTP 消息、PSR-15 中间件)紧密结合,了解这些标准会让你对 PHP 生态有更深的理解。
分享:
扫描分享到社交APP
上一篇
下一篇