Am un site web Drupal care găzduiește și o aplicație Ionic prin JSON:API. Vreau ca utilizatorii site-ului web să fie redirecționați pe inserarea entității, așa că am adăugat o redirecționare ca aceasta:
funcția MYMODULE_flagging_insert(FlaggingInterface $flagging) {
$redirect_url = Url::fromRoute(MYCLASS::SECRET_ROUTE)->toString();
$răspuns = new RedirectResponse($url);
$răspuns->trimite();
}
Acest cod va redirecționa utilizatorii web așa cum se aștepta atunci când adaugă un semnalizator. Cu toate acestea, acest cod rupe aplicația JSON:API. Când adaug un steag cu un utilizator din JSON:API, primesc această eroare:
RuntimeException: Nu s-a pornit sesiunea deoarece anteturile au fost deja trimise de „/app/vendor/symfony/http-foundation/Response.php” la linia 384.în Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage->start() (linia 152 din /app/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php)
#0 /app/web/core/lib/Drupal/Core/Session/SessionManager.php(162): Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage->start()
#1 /app/web/core/lib/Drupal/Core/Session/SessionManager.php(193): Drupal\Core\Session\SessionManager->startNow()
#2 /app/vendor/symfony/http-foundation/Session/Session.php(189): Drupal\Core\Session\SessionManager->save()
#3 /app/web/core/lib/Drupal/Core/StackMiddleware/Session.php(60): Symfony\Component\HttpFoundation\Session\Session->save()
#4 /app/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(47): Drupal\Core\StackMiddleware\Session->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#5 /app/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(106): Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#6 /app/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(85): Drupal\page_cache\StackMiddleware\PageCache->pass(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#7 /app/vendor/asm89/stack-cors/src/Asm89/Stack/Cors.php(60): Drupal\page_cache\StackMiddleware\PageCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, Adevărat)
#8 /app/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(47): Asm89\Stack\Cors->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#9 /app/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(52): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#10 /app/vendor/stack/builder/src/Stack/StackedHttpKernel.php(23): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#11 /app/web/core/lib/Drupal/Core/DrupalKernel.php(716): Stack\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#12 /app/web/index.php(19): Drupal\Core\DrupalKernel->handle(Obiect(Symfony\Component\HttpFoundation\Request))
#13 {principal}
Deci, există o modalitate de a detecta într-un cârlig de inserare (sau alte cârlige) dacă utilizatorul este conectat prin site-ul web Drupal sau prin JSON:API?
Vreau să adaug o redirecționare dacă utilizatorul accesează Drupal prin intermediul site-ului web, dar nu vreau să folosesc o redirecționare dacă utilizatorul accesează Drupal prin aplicație.