web-dev-qa-db-fra.com

Comment créer une action de règle personnalisée?

J'ai drupal 8, et je veux créer une action de règle personnalisée. Je l'ai créée dans Drupal 7, et ça marche bien. Je n'ai aucune idée comment le faire dans Drupal 8.

Pouvez-vous expliquer quel code dois-je utiliser pour Drupal 8?

Code 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

Vérifiez les actions du module Règles:

http://cgit.drupalcode.org/rules/tree/src/Plugin/RulesAction?h=8.x-3.x

Ce sont les actions fournies hors de la boîte par des règles.

Chaque classe d'action a une annotation @RulesAction. Câblez cela et vous devriez voir apparaître votre action Règles. Pensez à l'annotation ici très similaire à ce que vous auriez dans hook_rules_action_info().

La seule exception est qu'au lieu de le définir dans le fichier .module, il vivra dans mymodule/src/Rules/Plugin/RulesAction/NameOfYourAction.php.

Voici un exemple de ce à quoi cela pourrait ressembler:

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

}

Veuillez noter qu'au moment de la rédaction de ce document, Rules est en version alpha. Il peut changer avec les versions ultérieures.

5
Kevin