跳到内容

Contracts 组件

编辑此页

Contracts 组件提供了一组从 Symfony 组件中提取出来的抽象概念。它们可以用于构建 Symfony 组件证明有用的语义 - 以及已经过实战检验的实现。

安装

Contracts 以单独的包形式提供,因此你只需安装你的项目真正需要的包

1
2
3
4
5
6
$ composer require symfony/cache-contracts
$ composer require symfony/event-dispatcher-contracts
$ composer require symfony/deprecation-contracts
$ composer require symfony/http-client-contracts
$ composer require symfony/service-contracts
$ composer require symfony/translation-contracts

注意

如果你在 Symfony 应用程序之外安装此组件,你必须在你的代码中引入 vendor/autoload.php 文件,以启用 Composer 提供的类自动加载机制。阅读 这篇文章 获取更多详情。

用法

此包中的抽象概念对于实现松耦合和互操作性非常有用。通过使用提供的接口作为类型提示,你能够重用任何与其 contracts 匹配的实现。它可以是一个 Symfony 组件,或者是由更广泛的 PHP 社区提供的另一个包。

根据它们的语义,一些接口可以与 自动装配 结合使用,以在你的类中无缝注入服务。

其他接口可能用作标签接口,以提示关于特定行为,当使用 自动配置 或手动 服务标签 (或你的框架提供的任何其他方式)时可以启用。

设计原则

  • Contracts 按领域划分,每个领域都有自己的子命名空间;
  • Contracts 是小型且一致的 PHP 接口、trait、规范性文档块和参考测试套件(如果适用)的集合,...;
  • Contracts 必须具有经过验证的实现才能进入此仓库;
  • Contracts 必须向后兼容现有的 Symfony 组件。

实现特定 contracts 的包应在其 composer.json 文件的 provide 部分中列出它们,使用 symfony/*-implementation 约定。例如

1
2
3
4
5
6
{
    "...": "...",
    "provide": {
        "symfony/cache-implementation": "3.0"
    }
}

常见问题

这与 PHP-FIG 的 PSR 有何不同?

在适用情况下,提供的 contracts 构建于 PHP-FIG 的 PSR 之上。然而,PHP-FIG 有不同的目标和不同的流程。Symfony Contracts 侧重于提供本身有用的抽象概念,同时仍然与 Symfony 提供的实现兼容。

这项工作,包括代码示例,根据 Creative Commons BY-SA 3.0 许可协议获得许可。
TOC
    版本