Ich habe ein benutzerdefiniertes Modul, bei dem es sich im Grunde um APIs handelt. Daher müssen den Antworten Header wie der Inhaltstyp hinzugefügt werden. Ich habe drupal_add_http_header()
in Drupal 7 verwendet, aber es scheint in 8 veraltet zu sein. Gibt es einen Ersatz?
Ich habe auf der Drupal-Website darüber gelesen und über Symfony-Objektantwort gesprochen, aber ich kann das auch nicht verwenden.
$build['#attached']['http_header']
einen benutzerdefinierten Header hinzufügen.Antworten:
Wenn Sie die Header einer Antwort ändern möchten, müssen Sie einen EventSubscriber verwenden. Symphony hat kein Hook-System, sondern ein Event / Emitter-System. Da es Symphony ist, das den Anforderungs- / Antwortzyklus steuert, müssen Sie sich grundsätzlich in Symphony integrieren, um dies zu tun.
Sie könnten einen Blick darauf werfen, um
\Drupal\Core\EventSubscriber\FinishResponseSubscriber
zu sehen, wie dies gemacht wird. Der Kern davon ist folgender:Beachten Sie, dass im obigen Code alle Verwendungsanweisungen ausgeschlossen wurden. Außerdem müssen Sie Ihre Klasse als event_subscriber-Dienst registrieren. Dies erfolgt in der
module_name.services.yml
Datei Ihres Moduls wie folgt :Sie können in der Servicedatei wie gewohnt Argumente (andere Dienste) hinzufügen, von denen Ihre Klasse abhängt.
quelle
$build['#attached']['http_header'][] = [['Content-Type', 'application/rss+xml; charset=utf-8']];
(Beispiel ist von\Drupal\Core\Render\AttachmentsResponseProcessorInterface::processAttachments
)