snicco / better-wp-api
这个小型包试图解决无法解决引用WordPress核心代码的代码作用域的痛点。
Requires
- php: ^7.4|^8.0
Requires (Dev)
- codeception/codeception: ^4.1.29
- lucatume/wp-browser: ~3.1.4
- phpunit/phpunit: ^9.5.13
Conflicts
- snicco/better-wp-cache: <2.0.0-beta.9
- snicco/better-wp-cache-bundle: <2.0.0-beta.9
- snicco/better-wp-cli: <2.0.0-beta.9
- snicco/better-wp-cli-testing: <2.0.0-beta.9
- snicco/better-wp-hooks: <2.0.0-beta.9
- snicco/better-wp-hooks-bundle: <2.0.0-beta.9
- snicco/better-wp-mail: <2.0.0-beta.9
- snicco/better-wp-mail-bundle: <2.0.0-beta.9
- snicco/better-wp-mail-testing: <2.0.0-beta.9
- snicco/better-wpdb: <2.0.0-beta.9
- snicco/better-wpdb-bundle: <2.0.0-beta.9
- snicco/blade-bridge: <2.0.0-beta.9
- snicco/blade-bundle: <2.0.0-beta.9
- snicco/content-negotiation-middleware: <2.0.0-beta.9
- snicco/debug-bundle: <2.0.0-beta.9
- snicco/default-headers-middleware: <2.0.0-beta.9
- snicco/eloquent: <2.0.0-beta.9
- snicco/encryption-bundle: <2.0.0-beta.9
- snicco/event-dispatcher: <2.0.0-beta.9
- snicco/event-dispatcher-testing: <2.0.0-beta.9
- snicco/guests-only-middleware: <1.0.0
- snicco/http-routing: <2.0.0-beta.9
- snicco/http-routing-bundle: <2.0.0-beta.9
- snicco/http-routing-testing: <2.0.0-beta.9
- snicco/https-only-middleware: <2.0.0-beta.9
- snicco/illuminate-container-bridge: <2.0.0-beta.9
- snicco/kernel: <2.0.0-beta.9
- snicco/kernel-testing: <2.0.0-beta.9
- snicco/method-override-middleware: <2.0.0-beta.9
- snicco/minimal-logger: <2.0.0-beta.9
- snicco/must-match-route-middleware: <2.0.0-beta.9
- snicco/no-robots-middleware: <2.0.0-beta.9
- snicco/open-redirect-protection-middleware: <2.0.0-beta.9
- snicco/payload-middleware: <2.0.0-beta.9
- snicco/pimple-bridge: <2.0.0-beta.9
- snicco/psr7-error-handler: <2.0.0-beta.9
- snicco/redirect-middleware: <2.0.0-beta.9
- snicco/session: <2.0.0-beta.9
- snicco/session-bundle: <2.0.0-beta.9
- snicco/session-psr16-bridge: <2.0.0-beta.9
- snicco/session-testing: <2.0.0-beta.9
- snicco/session-wp-bridge: <2.0.0-beta.9
- snicco/share-cookies-middleware: <2.0.0-beta.9
- snicco/signed-url: <2.0.0-beta.9
- snicco/signed-url-psr15-bridge: <2.0.0-beta.9
- snicco/signed-url-psr16-bridge: <2.0.0-beta.9
- snicco/signed-url-testing: <2.0.0-beta.9
- snicco/signed-url-wp-bridge: <2.0.0-beta.9
- snicco/str-arr: <2.0.0-beta.9
- snicco/templating: <2.0.0-beta.9
- snicco/templating-bundle: <2.0.0-beta.9
- snicco/testable-clock: <2.0.0-beta.9
- snicco/testing-bundle: <2.0.0-beta.9
- snicco/trailing-slash-middleware: <2.0.0-beta.9
- snicco/wp-auth-only-middleware: <2.0.0-beta.9
- snicco/wp-capability-middleware: <2.0.0-beta.9
- snicco/wp-capapility-middleware: <1.0.0
- snicco/wp-guests-only-middleware: <2.0.0-beta.9
- snicco/wp-nonce-middleware: <2.0.0-beta.9
- dev-master
- v2.0.0-beta.9
- v2.0.0-beta.8
- v2.0.0-beta.7
- v2.0.0-beta.6
- v2.0.0-beta.5
- v2.0.0-beta.4
- v2.0.0-beta.3
- v2.0.0-beta.2
- v2.0.0-beta.1
- v1.10.1
- v1.10.0
- v1.9.1
- v1.9.0
- v1.8.1
- v1.8.0
- v1.7.0
- v1.6.2
- v1.6.1
- v1.6.0
- v1.5.0
- v1.4.2
- v1.4.1
- v1.4.0
- v1.3.0
- v1.2.1
- v1.2.0
- v1.1.3
- v1.1.2
- v1.1.1
- v1.1.0
- v1.0.2
- v1.0.1
- v1.0.0
- dev-beta
This package is auto-updated.
Last update: 2024-09-07 14:27:51 UTC
README
BetterWPAPI 是一个包含一些最常用 WordPress 核心方法代理方法的单类。
它旨在用于 分布式 WordPress 库,并帮助您保持库的可测试性和 作用域。
目录
动机
我们开发了这个库用于 WordPress 相关的 Snicco 项目的组件。
直接与核心函数交互对我们来说很麻烦,因为
- 没有
- a) 启动整个 WordPress 代码库或
- b) 使用额外的模拟框架 (模拟很糟糕),代码将无法进行测试。
- 使用事实上的标准工具 PHPScoper,代码变得非常难以作用域。
- 静态分析器如 Psalm 和 PHPStan 会疯狂地处理核心函数。
如果您无法理解这些问题,您可能不需要这个库。
编辑: 通过我们创建的 命令行程序 解决了作用域问题,该程序可以生成整个 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 中发现安全漏洞,请遵循我们的 披露程序。