stellarwp / schema
一个用于简化在WordPress中创建和更新自定义表的库。
Requires
- psr/container: ^1.0
- stellarwp/container-contract: ^1.0
Requires (Dev)
- brianhenryie/strauss: ^0.11.0
- codeception/module-asserts: ^1.0
- codeception/module-cli: ^1.0
- codeception/module-db: ^1.0
- codeception/module-filesystem: ^1.0
- codeception/module-phpbrowser: ^1.0
- codeception/module-rest: ^1.0
- codeception/module-webdriver: ^1.0
- codeception/util-universalframework: ^1.0
- lucatume/di52: ^3.0
- lucatume/wp-browser: ^3.0.14
- phpunit/phpunit: ~6.0
- stellarwp/db: ^1.0
- symfony/event-dispatcher-contracts: ^2.5.1
- symfony/string: ^5.4
- szepeviktor/phpstan-wordpress: ^1.1
README
一个用于简化在WordPress中创建、更新和字段修改自定义表的库。
安装
我们建议您通过 Composer 将Schema作为项目依赖项安装。
composer require stellarwp/schema
实际上,我们建议使用 Strauss 将此库包含到您的项目中。
幸运的是,将Strauss添加到您的
composer.json
的操作仅比添加典型依赖项稍微复杂一点,所以请查看我们的 strauss 文档。
使用前提
要实际使用该模式库,您必须在项目中拥有两个额外的库
- 一个与 di52 兼容的依赖注入容器(DI容器)(我们推荐使用di52)。
- stellarwp/db 库。
为了使此库尽可能轻量,这些依赖项没有包含在库本身中。为了避免版本兼容性问题,这些库也没有作为Composer依赖项包含。相反,您必须将它们包含到您的项目中。我们建议通过composer 使用Strauss 包含它们,就像您包含此库一样。
所有示例的重要说明
本项目的所有示例都将假定您正在使用 Strauss 为此库提供的命名空间添加前缀。
示例将使用
Boom\Shakalaka\
作为命名空间前缀,尽管有时会简称为PREFIX\
以便在文档中简化。BOOM_SHAKALAKA_
作为常量前缀。
入门指南
为了全面了解此库中可用的内容以及如何使用它,请务必阅读完整的 文档。但对于那些想快速入门的人来说,可以尝试以下步骤。
初始化库
use Boom\Shakalaka\StellarWP\Schema\Config; // You'll need a Dependency Injection Container that is compatible with https://github.com/lucatume/di52. use Boom\Shakalaka\lucatume\DI52\Container; // You'll need to use the StellarWP\DB library for database operations. use Boom\Shakalaka\StellarWP\DB\DB; $container = new Boom\Shakalaka\lucatume\DI52\Container(); Config::set_container( $container ); Config::set_db( DB::class );
创建一个表
假设您想要一个名为 sandwiches
的新自定义表(默认情况下,如果使用WP前缀,则为 wp_sandwiches
)。您需要一个类文件用于该表。为了这个例子,我们将假设这个类文件位于 Tables/
目录中,并且可以通过 Boom\Shakalaka\Tables
命名空间访问。
<?php namespace Boom\Shakalaka\Tables; use Boom\Shakalaka\StellarWP\Schema\Tables\Contracts\Table; class Sandwiches extends Table { /** * {@inheritdoc} */ const SCHEMA_VERSION = '1.0.0'; /** * {@inheritdoc} */ protected static $base_table_name = 'sandwiches'; /** * {@inheritdoc} */ protected static $group = 'boom'; /** * {@inheritdoc} */ protected static $schema_slug = 'boom-sandwiches'; /** * {@inheritdoc} */ protected static $uid_column = 'id'; /** * {@inheritdoc} */ protected function get_definition() { global $wpdb; $table_name = self::table_name( true ); $charset_collate = $wpdb->get_charset_collate(); return " CREATE TABLE `{$table_name}` ( `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) {$charset_collate}; "; } }
以下是属性和方法的意义
$base_table_name
: 表的名称,不带前缀。$group
: 表所属的组 - 这是为了组织目的。$schema_slug
: 表的标识符。这用于在wp_options
中存储您的表的模式版本。$uid_column
: 用于唯一标识每行的列名。get_definition()
:此函数应返回创建您的sandwiches
表所使用的SQL基本定义。要获取包含任何字段模式的完整SQL,您可以调用get_sql()
!
注册表
当您注册表或字段模式时,模式库会自动初始化。要注册您的表,只需在plugins_loaded
中调用方便的Register::table()
方法即可。
namespace Boom\Shakalaka; use Boom\Shakalaka\StellarWP\Schema\Register; use Boom\Shakalaka\Tables\Sandwiches; add_action( 'plugins_loaded', static function() { Register::table( Sandwiches::class ); } );
就这么简单!
在plugins_loaded
动作期间,将自动注册、创建和更新表,优先级为1000
!(该优先级数字可通过stellarwp_schema_up_plugins_loaded_priority
过滤器进行筛选)
文档
以下是更多高级文档,帮助您更深入地使用此库
致谢
特别感谢@lucatume和@stratease在将其提取为独立库之前对这一结构的初始工作。