cycle / schema-renderer
Cycle ORM Schema 渲染的实用工具
1.2.0
2022-12-15 16:14 UTC
Requires
- php: >=7.4
- cycle/orm: 1.2 - 2
Requires (Dev)
- phpunit/phpunit: ^9.5
- spiral/code-style: ^1.0
- vimeo/psalm: ^4.10|^5.1
README
此包可用于在终端中渲染 Cycle ORM Schema 或生成 PHP 表示形式。
安装
安装此包的首选方式是通过 Composer
composer require cycle/schema-renderer
示例
将模式转换为数组
$schema = new Schema([...]); $converter = new \Cycle\Schema\Renderer\SchemaToArrayConverter(); $schemaArray = $converter->convert($schema);
如果传递的 SchemaInterface
不包含 toArray()
方法,则 SchemaToArrayConverter
将仅从 Cycle\ORM\SchemaInterface
转换常见属性。也会跳过空值。
在这种情况下,如果您想使用自定义属性,可以将它们传递给构造函数
$converter = new \Cycle\Schema\Renderer\SchemaToArrayConverter(); $schemaArray = $converter->convert($schema, [ 42, CustomClass::CUSTOM_PROPERTY, ... ]);
将模式渲染到终端
use Cycle\Schema\Renderer\OutputSchemaRenderer; $output = new \Symfony\Component\Console\Output\ConsoleOutput(); $renderer = new OutputSchemaRenderer(colorize: true); $output->write($renderer->render($schemaArray));
默认情况下,DefaultSchemaOutputRenderer
只在模板中渲染常见属性和关系。自定义属性将按原样在单独的块中渲染。如果您想扩展默认渲染模板,可以创建自定义渲染器并将它们添加到输出渲染器中。
use Cycle\Schema\Renderer\ConsoleRenderer\Renderer; use Cycle\Schema\Renderer\ConsoleRenderer\Formatter; use Cycle\Schema\Renderer\OutputSchemaRenderer; class CustomPropertyRenderer implements Renderer { public function render(Formatter $formatter, array $schema, string $role): string { $data = $schema['my_custom_property'] ?? null; return \sprintf( '%s: %s', $formatter->title($this->title), $data === null ? $formatter->error('not defined') : $formatter->typecast($data) ); } } $renderer = new OutputSchemaRenderer(); $renderer->addRenderer( new CustomPropertyRenderer(), new PropertyRenderer('my_custom_property', 'My super property') ); $output->write($renderer->render($schemaArray))
将模式存储在 PHP 文件中
use Cycle\Schema\Renderer\PhpSchemaRenderer; $path = __DIR__. '/schema.php' $renderer = new PhpSchemaRenderer(); \file_put_contents($path, $renderer->render($schemaArray));
渲染器生成有效的 PHP 代码,在该代码中,Cycle ORM 类的常量被替换以提高可读性。
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅 LICENSE
。由 Spiral Scout 维护。