Рейтинг:0

Custom Simple Action after updating a node

флаг cn

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 Drupal\my_custom_actions\Plugin\Action;

use Drupal\Core\Action\ActionBase;
use Drupal\Core\Session\AccountInterface;

/**
 * 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 \Drupal\node\NodeInterface $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!

Kevin avatar
флаг in
Отвечает ли это на ваш вопрос? [Как создать собственное простое действие в D8?](https://drupal.stackexchange.com/questions/230742/how-to-create-my-own-custom-simple-action-in-d8)

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.