headless_cms-1.0.3/modules/headless_cms_preview/src/Routing/Routes.php

modules/headless_cms_preview/src/Routing/Routes.php
<?php

declare(strict_types=1);

namespace Drupal\headless_cms_preview\Routing;

use Drupal\Core\Routing\RouteObjectInterface;
use Drupal\headless_cms_preview\ParamConverter\HeadlessNodePreviewConverter;
use Drupal\jsonapi\ParamConverter\ResourceTypeConverter;
use Drupal\jsonapi\Routing\Routes as JsonApiRoutes;
use Symfony\Component\Routing\Route;
use Symfony\Component\Routing\RouteCollection;

/**
 * Defines dynamic routes for node previews.
 */
class Routes extends JsonApiRoutes {

  /**
   * {@inheritdoc}
   */
  // phpcs:ignore
  public function routes() {
    $routes = new RouteCollection();

    foreach ($this->resourceTypeRepository->all() as $resourceType) {
      // Only handle `node` entities.
      if ($resourceType->getEntityTypeId() === "node") {
        $previewRoute = new Route(vsprintf("/%s/{node_preview}/preview", [
          $resourceType->getPath(),
        ]));

        $previewRoute
          ->setMethods(['GET'])
          ->setRequirement('_node_preview_access', '{node_preview}')
          ->addDefaults([
            RouteObjectInterface::CONTROLLER_NAME => 'Drupal\headless_cms_preview\Controller\JsonApiEntityResource:getIndividualNodePreview',
            self::RESOURCE_TYPE_KEY => $resourceType->getTypeName(),
          ])
          ->addOptions([
            // Disable caching so anonymous users get the fresh preview data.
            'no_cache' => TRUE,
            'parameters' => [
              'node_preview' => [
                'type' => HeadlessNodePreviewConverter::TYPE_KEY,
              ],
            ],
          ]);

        self::addRouteParameter(
          route: $previewRoute,
          name: self::RESOURCE_TYPE_KEY,
          parameter: [
            'type' => ResourceTypeConverter::PARAM_TYPE_ID,
          ]
        );

        $routes->add(self::getRouteName($resourceType, 'individual.preview'), $previewRoute);
      }
    }

    // Resource routes all have the same base path.
    $routes->addPrefix($this->jsonApiBasePath);

    // Require the JSON:API media type header on every route.
    $routes->addRequirements(['_content_type_format' => 'api_json']);

    // Enable all available authentication providers.
    $routes->addOptions(['_auth' => $this->providerIds]);

    // Flag every route as belonging to the JSON:API module.
    $routes->addDefaults([static::JSON_API_ROUTE_FLAG_KEY => TRUE]);

    // All routes serve only the JSON:API media type.
    // This is the only "required" requirement (forgive the redundancy) to make
    // JSON:API return its own 404 error (in JSON format) instead of Drupal's
    // default 404 HTML page.
    $routes->addRequirements(['_format' => 'api_json']);

    return $routes;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc