snicco/better-wp-api

这个小型包试图解决无法解决引用WordPress核心代码的代码作用域的痛点。

维护者

详细信息

github.com/snicco/better-wp-api

来源

安装: 16,451

依赖者: 13

建议者: 0

安全: 0

星标: 1

关注者: 1

分支: 0

v2.0.0-beta.9 2024-09-07 14:27 UTC

README

codecov Psalm Type-Coverage Psalm level PhpMetrics - Static Analysis PHP-Versions

BetterWPAPI 是一个包含一些最常用 WordPress 核心方法代理方法的单类。

它旨在用于 分布式 WordPress 库,并帮助您保持库的可测试性和 作用域

目录

  1. 动机
  2. 安装
  3. 使用
  4. 贡献
  5. 问题和PR
  6. 安全

动机

我们开发了这个库用于 WordPress 相关的 Snicco 项目的组件。

直接与核心函数交互对我们来说很麻烦,因为

  • 没有
    • a) 启动整个 WordPress 代码库或
    • b) 使用额外的模拟框架 (模拟很糟糕),代码将无法进行测试。
  • 使用事实上的标准工具 PHPScoper,代码变得非常难以作用域
  • 静态分析器如 PsalmPHPStan 会疯狂地处理核心函数。

如果您无法理解这些问题,您可能不需要这个库。

编辑: 通过我们创建的 命令行程序 解决了作用域问题,该程序可以生成整个 WordPress 核心代码库中所有函数和类的列表。目前,使用它的最佳示例是 Google Web stories插件的 scoper.inc.php 配置

安装

composer require snicco/better-wp-api

使用

这是 BetterWPAPI 的公共API。在下一个主要版本之前,不会添加任何公共或受保护的函数。

想法是限制与 WordPress 核心的交互只限于这个类。

这对我们来说非常有效,因为我们能够保持代码的可测试性和作用域。您有一个单类,您可以在其中看到库与 核心 之间的所有交互。在测试期间,您可以简单地用测试双胞胎替换这个类。

重要的是: 所有需要WordPress任何内容的类都必须接受这个类作为构造函数依赖项

一个简单的例子:(对于真实示例,请查看BetterWPMail 组件)

假设我们有一个以下类

use Snicco\Component\BetterWPAPI\BetterWPAPI;

class CSVImporter {

    public function __construct(BetterWPAPI $wp = null) {
        $this->wp = $wp ?: new BetterWPAPI();
    }
    
    public function import(string $file){
    
        if(!$this->wp->currentUserCan('import-csv')) {
            throw new Exception('Not authorized');
        }
        // import csv.
    }
    
}

这是我们在生产代码中使用它的方式。

$importer = new CSVImporter();

$importer->import(__DIR__.'/orders.csv');

这是我们测试代码的方式。无需引导 WordPress

class CSVImporterTest extends TestCase {

   /**
    * @test
    */
    public function that_missing_permissions_throw_an_exception() {
        
        $this->expectExceptionMessage('Not authorized');
        
        $wp = new class extends BetterWPAPI {
            public function currentUserCan():bool {
                return false;
            }
        }
        
        $importer = new CSVImporter($wp);
        $importer->import(__DIR__.'/test-users.csv');
    }

}

贡献

这个存储库是 Snicco 项目 开发存储库的只读分支。

这是您可以如何贡献.

报告问题和发送拉取请求

请在 Snicco 单一代码库 中报告问题。

安全

如果您在 BetterWPAPI 中发现安全漏洞,请遵循我们的 披露程序