MachineNameController.php in Drupal 10
File
core/modules/system/src/MachineNameController.php
View source
<?php
namespace Drupal\system;
use Drupal\Component\Transliteration\TransliterationInterface;
use Drupal\Core\Access\CsrfTokenGenerator;
use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
use Symfony\Component\DependencyInjection\ContainerInterface;
class MachineNameController implements ContainerInjectionInterface {
protected $transliteration;
protected $tokenGenerator;
public function __construct(TransliterationInterface $transliteration, CsrfTokenGenerator $token_generator) {
$this->transliteration = $transliteration;
$this->tokenGenerator = $token_generator;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('transliteration'), $container
->get('csrf_token'));
}
public function transliterate(Request $request) {
$text = $request->query
->get('text');
$langcode = $request->query
->get('langcode');
$replace_pattern = $request->query
->get('replace_pattern');
$replace_token = $request->query
->get('replace_token');
$replace = $request->query
->get('replace');
$lowercase = $request->query
->get('lowercase');
$transliterated = $this->transliteration
->transliterate($text, $langcode, '_');
if ($lowercase) {
$transliterated = mb_strtolower($transliterated);
}
if (isset($replace_pattern) && isset($replace)) {
if (!isset($replace_token)) {
throw new AccessDeniedHttpException("Missing 'replace_token' query parameter.");
}
elseif (!$this->tokenGenerator
->validate($replace_token, $replace_pattern)) {
throw new AccessDeniedHttpException("Invalid 'replace_token' query parameter.");
}
$transliterated = preg_replace('@' . strtr($replace_pattern, [
'@' => '\\@',
chr(0) => '',
]) . '@', $replace, $transliterated);
}
return new JsonResponse($transliterated);
}
}