eca-1.0.x-dev/modules/endpoint/src/Plugin/Action/ResponseActionBase.php
modules/endpoint/src/Plugin/Action/ResponseActionBase.php
<?php
namespace Drupal\eca_endpoint\Plugin\Action;
use Drupal\Core\Access\AccessResult;
use Drupal\Core\Session\AccountInterface;
use Drupal\eca\Plugin\Action\ConfigurableActionBase;
use Drupal\eca_endpoint\Event\EndpointResponseEvent;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
/**
* Base class for response actions.
*/
abstract class ResponseActionBase extends ConfigurableActionBase {
/**
* Get the current response.
*
* @return \Symfony\Component\HttpFoundation\Response|null
* The response, or NULL if not available.
*/
public function getResponse(): ?Response {
if ($this->event instanceof EndpointResponseEvent) {
return $this->event->response;
}
if ($this->event instanceof ResponseEvent) {
return $this->event->getResponse();
}
return NULL;
}
/**
* {@inheritdoc}
*/
public function access($object, ?AccountInterface $account = NULL, $return_as_object = FALSE) {
$result = $this->getResponse() ? AccessResult::allowed() : AccessResult::forbidden("No response available.");
return $return_as_object ? $result : $result->isAllowed();
}
/**
* {@inheritdoc}
*/
public function execute(): void {
if ($this->getResponse()) {
$this->doExecute();
}
}
/**
* Implementation detail of the action execution.
*/
abstract protected function doExecute(): void;
}
