drupal 8があり、カスタムルールアクションを作成したい。Drupal 7に作成したが、うまく機能している。わからないDrupal 8。
Drupal 8にどのコードを使用すればよいですか?
function custom_rules_action_info() {
return array(
'custom_action1' => array(
'label' => t('custom_action1'),
'group' => t('Custom'),
'parameter' => array(
'user_id' => array(
'type' => 'integer',
'label' => t('User ID'),
'description' => t('User ID.'),
),
),
'provides' => array(
'return_value' => array(
'type' => 'text',
'label' => t('User Created with return_value'),
),
),
),
);
}
ルールモジュールのアクションを確認します。
http://cgit.drupalcode.org/rules/tree/src/Plugin/RulesAction?h=8.x-3.x
これらは、ルールによってすぐに使用できるアクションです。
各アクションクラスには_@RulesAction
_アノテーションがあります。これを配線すると、ルールアクションが表示されます。ここでの注釈は、hook_rules_action_info()
の注釈とよく似ています。
唯一の例外は、それを.moduleファイルで定義する代わりに、_mymodule/src/Rules/Plugin/RulesAction/NameOfYourAction.php
_に存在します。
以下はその例です。
_namespace Drupal\mymodule\Plugin\RulesAction;
use Drupal\user\UserInterface;
use Drupal\rules\Core\RulesActionBase;
/**
* Provides a 'custom action' action.
*
* @RulesAction(
* id = "mymodule_custom_action",
* label = @Translation("Custom Action"),
* category = @Translation("Custom"),
* context = {
* "user" = @ContextDefinition("entity:user",
* label = @Translation("User"),
* description = @Translation("Specifies the user we are taking action on.")
* ),
* }
* )
*
*/
class NameOfYourAction extends RulesActionBase {
/**
* Flag that indicates if the entity should be auto-saved later.
*
* @var bool
*/
protected $saveLater = FALSE;
/**
* Does something to the user entity.
*
* @param \Drupal\user\UserInterface $account
* The user to take action on.
*/
protected function doExecute(UserInterface $account) {
// execution code
// you may want to set $this->saveLater based on your use case
}
/**
* {@inheritdoc}
*/
public function autoSaveContext() {
if ($this->saveLater) {
return ['user'];
}
return [];
}
}
_
この記事の執筆時点では、ルールはアルファリリース状態にあることに注意してください。今後のリリースで変更される可能性があります。