Рейтинг:-2

Почему возникает исключение, когда я вставляю токен в качестве значения атрибута html src

флаг sa

Как вызвать исключение:

В любое поле text_area с помощью ckeditor вставьте следующий код <img src="[node:my_custom_token]"> и сохраните форму.

Вы получите следующую ошибку: (при условии, что отредактированная форма была http://mysite/fr/node/8/edit)

страница не найдена|127.0.0.1|http://mysite/fr/node/8/[node:my_custom_token]

Это NotFoundHttpException брошенный в RouterListener

Вот след

Внутренний вызов PHP Symfony\Component\HttpKernel\EventListener\RouterListener->onKernelRequest(Symfony\Component\HttpKernel\Event\GetResponseEvent $event)
<ROOT>/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php:142 call_user_func($function_name, $parameters)
<ROOT>/vendor/symfony/http-kernel/HttpKernel.php:134 Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch($event)
<ROOT>/vendor/symfony/http-kernel/HttpKernel.php:80 Symfony\Component\HttpKernel\HttpKernel->handleRaw(Symfony\Component\HttpFoundation\Request $request, int $type = 1)
<ROOT>/core/lib/Drupal/Core/StackMiddleware/Session.php:57 Symfony\Component\HttpKernel\HttpKernel->handle(Symfony\Component\HttpFoundation\Request $request, $type = 1, $catch = true)
<ROOT>/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php:47 Drupal\Core\StackMiddleware\Session->handle(Symfony\Component\HttpFoundation\Request $request, $type = 1, $catch = true)
<ROOT>/core/modules/page_cache/src/StackMiddleware/PageCache.php:106 Drupal\Core\StackMiddleware\KernelPreHandle->handle(Symfony\Component\HttpFoundation\Request $request, $type = 1, $catch = true)
<ROOT>/core/modules/page_cache/src/StackMiddleware/PageCache.php:85 Drupal\page_cache\StackMiddleware\PageCache->pass(Symfony\Component\HttpFoundation\Request $request, $type = 1, $catch = true)
<ROOT>/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php:47 Drupal\page_cache\StackMiddleware\PageCache->handle(Symfony\Component\HttpFoundation\Request $request, $type = 1, $catch = true)
<ROOT>/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php:52 Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Symfony\Component\HttpFoundation\Request $request, $type = 1, $catch = true)
<ROOT>/vendor/stack/builder/src/Stack/StackedHttpKernel.php:23 Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Symfony\Component\HttpFoundation\Request $request, $type = 1, $catch = true)
<ROOT>/core/lib/Drupal/Core/DrupalKernel.php:716 Stack\StackedHttpKernel->handle(Symfony\Component\HttpFoundation\Request $request, $type = 1, $catch = true)
Baud avatar
флаг sa
Не могли бы вы объяснить отрицательные голоса. Я думаю, что всем полезно понять процесс «проверки» (с помощью ckeditor?) URL-адреса в атрибутах html, таких как src.
Jaypan avatar
флаг de
Ваш токен не заменяется. Я не могу сказать вам, почему нет, хотя. Возможно, используемый вами текстовый фильтр не заменяет токены. Однако это не будет иметь ничего общего с вашим редактором.
Baud avatar
флаг sa
Спасибо @Jaypan. Мой вопрос не о замене токена, но я хотел бы понять, какой/где находится процесс/код, который проверяет URL-адрес атрибута src изображения. Это не вопрос, связанный с токеном: исключение возникает, если вы заменяете токен строкой вроде «i_am_not_a_token».
Kevin avatar
флаг in
Токен не заменяется при отображении шаблона/страницы, поэтому браузер запрашивает несуществующий URL-адрес. Это в основном все. Либо фильтр не обрабатывает токены, либо что-то не так в вашей пользовательской логике токена.
Jaypan avatar
флаг de
Кевин объяснил причину, по которой мой ответ приводит к ошибке, которую вы видите.
Рейтинг:3
флаг us

Если вы редактируете сущность и сохраняете ее, вы будете перенаправлены на страницу, показывающую сущность.
Как в содержимом объекта, которое вы добавили <img src="[node:my_custom_token]">, браузер пытается получить доступ к http://your-site-domain/[node:my_custom_token], чтобы получить данные изображения для изображения, которое он должен отображать. Drupal не находит ни одного маршрута, связанного с этим URL-адресом, и регистрирует Страница не найдена ошибка и выдает исключение.

Это не связано с использованием токенов, так как это может произойти, если вы введете несуществующий URL своего сайта, для источник атрибут.

Если вам интересно, почему этот токен не заменяется, это потому, что поле формы сущности не настроено на замену токенов, что также может произойти, когда поле сущности является Текст (форматированный, длинный) поле, для которого ни один из входных фильтров не установил маркеры дескриптора формата.

Baud avatar
флаг sa
Спасибо!! Что странно, так это то, что сайт не перенаправляет на страницу, показывающую (пользовательский) объект; таким образом, я не знаю, где происходит рендеринг... Во всяком случае, относительно «Drupal не находит маршрут, связанный с этим URL-адресом, и регистрирует ошибку «Страница не найдена» и выдает исключение». Можно ли этого избежать? [К вашему сведению: это объект конфигурации, в котором хранятся шаблоны (html + токены) для создания pdf в другой части сайта]
apaderno avatar
флаг us
В вопросе говорится, что форма была на http://mysite/fr/node/8/edit. Это сущность узла, а не сущность конфигурации.
Baud avatar
флаг sa
Вы правы, не усложнять вопрос было... очень плохая идея!!! Реальный путь: «admin/structure/token_templates/pdf_aw_card_body/edit», где «pdf_aw_card_body» — это идентификатор моего объекта конфигурации (прежде чем задать вопрос здесь, я протестировал обычный маршрут узла редактирования, и также возникло исключение... )

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

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