web-dev-qa-db-ja.com

カスタムルールアクションを作成するにはどうすればよいですか?

drupal 8があり、カスタムルールアクションを作成したい。Drupal 7に作成したが、うまく機能している。わからないDrupal 8。

Drupal 8にどのコードを使用すればよいですか?

Drupal 7コード

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'),
                ),
            ),
        ),
    );
}
3
AshwinP

ルールモジュールのアクションを確認します。

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 [];
  }

}
_

この記事の執筆時点では、ルールはアルファリリース状態にあることに注意してください。今後のリリースで変更される可能性があります。

5
Kevin