keboola / php-component
开发Keboola PHP组件的帮助类
Requires
- php: >=8.1
- ext-json: *
- keboola/common-exceptions: ^1.2
- monolog/monolog: ^2.3
- symfony/config: ^5.4|^6.0
- symfony/filesystem: ^5.4|^6.0
- symfony/finder: ^5.4|^6.0
- symfony/property-access: ^5.4|^6.0
- symfony/serializer: ^5.4|^6.0
Requires (Dev)
- devedge/sami-github: ^1.0
- keboola/coding-standard: ^15.0
- keboola/php-temp: ^2.0
- phpstan/phpstan: ^1.4
- phpunit/phpunit: ^9.5
- dev-master
- 10.1.5
- 10.1.4
- 10.1.3
- 10.1.2
- 10.1.1
- 10.1.0
- 10.0.2
- 10.0.1
- 10.0.0
- 9.4.0
- 9.3.0
- 9.2.0
- 9.1.2
- 9.1.1
- 9.1.0
- 9.0.0
- 8.3.0
- 8.2.0
- 8.1.2
- 8.1.1
- 8.1.0
- 8.0.0
- 7.0.3
- 7.0.2
- 7.0.1
- 7.0.0
- 6.0.1
- 6.0.0
- 5.0.0
- 4.4.2
- 4.4.1
- 4.4.0
- 4.3.0
- 4.2.0
- 4.1.1
- 4.1.0
- 4.0.0
- 3.0.0
- 2.1.0
- 2.0.0
- 1.0.0
- dev-miro-php-8
- dev-webrouse-COM-153-monolog-fix
This package is auto-updated.
Last update: 2024-09-14 06:57:32 UTC
README
在KBC中运行的PHP组件的通用库。该库提供了与Docker Runner相关的功能。
安装
composer require keboola/php-component
用法
创建BaseComponent
的子类。
<?php class Component extends \Keboola\Component\BaseComponent { protected function run(): void { // get parameters $parameters = $this->getConfig()->getParameters(); // get value of customKey.customSubKey parameter and fail if missing $customParameter = $this->getConfig()->getValue(['parameters', 'customKey', 'customSubKey']); // get value with default value if not present $customParameterOrNull = $this->getConfig()->getValue(['parameters', 'customKey'], 'someDefaultValue'); // get manifest for input file $fileManifest = $this->getManifestManager()->getFileManifest('input-file.csv'); // get manifest for input table $tableManifest = $this->getManifestManager()->getTableManifest('in.tableName'); // write manifest for output file $this->getManifestManager()->writeFileManifest( 'out-file.csv', (new OutFileManifestOptions()) ->setTags(['tag1', 'tag2']) ); // write manifest for output table $this->getManifestManager()->writeTableManifest( 'data.csv', (new OutTableManifestOptions()) ->setPrimaryKeyColumns(['id']) ->setDestination('out.report'), true // legacy manifest format flag ); } protected function customSyncAction(): array { return ['result' => 'success', 'data' => ['joe', 'marry']]; } protected function getSyncActions(): array { return ['custom' => 'customSyncAction']; } }
使用此src/run.php
模板。
<?php declare(strict_types=1); use Keboola\Component\Logger; require __DIR__ . '/../vendor/autoload.php'; $logger = new Logger(); try { $app = new MyComponent\Component($logger); $app->execute(); exit(0); } catch (\Keboola\Component\UserException $e) { $logger->error($e->getMessage()); exit(1); } catch (\Throwable $e) { $logger->critical( get_class($e) . ':' . $e->getMessage(), [ 'errFile' => $e->getFile(), 'errLine' => $e->getLine(), 'errCode' => $e->getCode(), 'errTrace' => $e->getTraceAsString(), 'errPrevious' => $e->getPrevious() ? get_class($e->getPrevious()) : '', ] ); exit(2); }
同步操作支持
同步操作可以通过API直接调用。API会阻塞并等待结果。根据配置中的action
键选择正确的操作。BaseComponent
类会自动处理选择。它还处理操作结果的序列化和输出 - 同步操作必须输出有效的JSON。
实现同步操作
- 在你的
Component
类中添加一个方法。命名完全由你决定。 - 重写
Component::getSyncActions()
方法,以返回包含你的同步操作名称作为键和对应的Component
类方法名称的值的数组。 - 方法的返回值将被序列化为JSON
自定义配置
自定义配置获取器
你可能想在配置中添加自定义参数的获取方法。这样你就不需要记住确切的键(parameters.customKey.customSubKey
),而是可以使用一个方法来获取值($config->getCustomSubKey()
)。
简单地创建自己的Config
类,该类扩展BaseConfig
,并重写\Keboola\Component\BaseComponent::getConfigClass()
方法以返回你的新类名称。
class MyConfig extends \Keboola\Component\Config\BaseConfig { public function getCustomSubKey() { $defaultValue = 0; return $this->getValue(['parameters', 'customKey', 'customSubKey'], $defaultValue); } }
以及
class MyComponent extends \Keboola\Component\BaseComponent { protected function getConfigClass(): string { return MyConfig::class; } }
自定义参数验证
要验证输入参数,扩展\Keboola\Component\Config\BaseConfigDefinition
类。通过重写getParametersDefinition()
方法,你可以验证配置的参数部分。确保返回你添加的实际节点,而不是TreeBuilder
。你可以使用parent::getParametersDefinition()
来获取默认节点,或者你可以自己构建它。
如果你需要验证配置的其他部分,可以重写getRootDefinition()
方法。同样,确保返回实际的节点,而不是TreeBuilder
。
class MyConfigDefinition extends \Keboola\Component\Config\BaseConfigDefinition { protected function getParametersDefinition() { $parametersNode = parent::getParametersDefinition(); $parametersNode ->isRequired() ->children() ->arrayNode('customKey') ->isRequired() ->children() ->integerNode('customSubKey') ->isRequired(); return $parametersNode; } }
注意:由于\Symfony\Component\Config\Definition\Builder\ExprBuilder::end()
方法的复杂类型行为,你的构建可能会因为PhpStan而失败,因此你可能需要忽略一些错误。
同样,你需要在你的组件中提供新的类名称
class MyComponent extends \Keboola\Component\BaseComponent { protected function getConfigDefinitionClass(): string { return MyConfigDefinition::class; } }
如果配置定义的任何约束未满足,将抛出UserException
。这意味着你不需要自己处理消息。
从版本6迁移到版本7
组件的默认入口点(在index.php
中)已从BaseComponent::run()
更改为BaseComponent::execute()
。请注意,run
方法现在不能再是公开的,只能从组件内部调用。
更多阅读
有关更多信息,请参阅生成的文档。有关KBC集成的帮助,请参阅开发指南。
许可证
MIT许可,请参阅LICENSE文件。