I am trying to create a simple way to execute certain actions on the database every time when I update a node.
I have been looking at Drupal’s Action module, however I can’t find any good manuals explaining how to use it. The ECA module works as a mechanism to launch my Action but I can’t execute my Action and I don’t know how to proceed.
I am currently creating my own module that will contain my actions. The following class is the class of my action.
<?php namespace Drupalmy_custom_actionsPluginAction; use DrupalCoreActionActionBase; use DrupalCoreSessionAccountInterface; /** * create custom action * * @Action( * id = "node_action", * label = @Translation("DataBase Action"), * type = "node" * ) */ class DBAction extends ActionBase { /** * {@inheritdoc} */ public function execute($node = NULL) { if ($node) { // TODO: procedure to execute in database Drupal::messenger()->addStatus('The execution is OK, and we have the node'); } } /** * {@inheritdoc} */ public function access($object, AccountInterface $account = NULL, $return_as_object = FALSE) { /** @var DrupalnodeNodeInterface $object */ // TODO: write here your permissions $result = $object->access('update', $account, TRUE); return $return_as_object ? $result : $result->isAllowed(); } }
The config/schema/module_test.schema.yml file like this :
action.configuration.module_test: type: node_action label: 'DataBase Action'
config/install/system.action.node_action.yml
langcode: en status: true dependencies: module: - node id: node_action label: 'Export Content' type: node plugin: node_action configuration: { }
However, after update one node, two things happen:
- The variable $node of the execute method always comes in as null. Not entering to the if.
- The variable $object of the access method always comes as null. Throwing an error in $result = $object->access(‘update’, $account, TRUE);
I don’t know if the actions work only for Bulk Operations. But my goal is to only execute an action every time I update a node. Am I on the right track using Actions or not? Drupal documentation doesn’t seem very intuitive to me.
Thanks!