drupal_add_http_header()の代替[クローズ]


7

基本的にAPIであるカスタムモジュールがあるため、応答にcontent-typeなどのヘッダーを追加する必要があります。私はdrupal_add_http_header()Drupal 7で使用していましたが、8では廃止されるようです。何か代替品はありますか?

DrupalのWebサイトでSymfonyオブジェクトの応答について説明しましたが、それも使用できません。


あなたが述べたように、Symfony Responseオブジェクトはdrupal_add_http_headerを使用するためのD8の置き換えです。使用できない理由を説明する必要があります。
Shawn Conn

関数に応答オブジェクトを渡す必要があるためです。PHPのヘッダー関数を使用して同じことを達成できますか?
Hemant Kumar Goyal

Drupal Answersへようこそ!使用しているコードを表示し、詳細を示す必要があります。たとえば、コントローラを使用しているのか、何を使用しているのかは説明からわかりません。コメントは少しわかりにくいです。応答オブジェクトを関数に渡すのはなぜですか?それをDrupalに戻すだけで十分ですが、コードを確認しないと、使用するコードを通知することはできません。
kiamlaluno

www.drupal.orgからのディスカッションスレッドが見つかりましたが、これはほとんど役に立ちません。1. drupal.org/node/2307723。2. drupal.org/node/2467759
Shreya Shetty

を使用$build['#attached']['http_header']して、カスタムヘッダーを追加できます。
kenorb 2017

回答:


10

応答のヘッダーを変更する場合は、EventSubscriberを使用する必要があります。Symphonyにはフックシステムはありませんが、代わりにイベント/エミッターシステムを使用します。Symphonyが要求/応答サイクルを駆動しているため、これを行うには基本的にSymphonyと統合する必要があります。

\Drupal\Core\EventSubscriber\FinishResponseSubscriberこれがどのように行われるかを見てみることができます、その要点はこれです:

/**
 * Add custom headers.
 */
class HeaderResponseSubscriber implements EventSubscriberInterface {
  public function onRespond(FilterResponseEvent $event) {
    $response = $event->getResponse();
    $response->headers->set('Some-Header', 'some value'); 
  }

  public static function getSubscribedEvents() {
    $events[KernelEvents::RESPONSE][] = array('onRespond');
    return $events;
  }
}

上記のコードではすべてのuseステートメントが除外されていることに注意してください。また、クラスをevent_subscriberサービスとして登録する必要があります。これは、次のようにモジュールのmodule_name.services.ymlファイルで行われます。

services:
  name_of_service:
    class: Drupal\Full\Namespaced\Path\To\Class
    tags:
      - { name: event_subscriber }

クラスが依存する引数(他のサービス)を通常のようにservicesファイルに追加できます。


6
良い答えですが、他の人が作成した応答を変更または拡張する必要がある場合にのみ必要であることを言及する価値があります。自分で応答を返す場合は、それらのメソッドを直接呼び出すだけです。そして、レンダー配列(ブロック、フィールドなど)を返すものの一部としてそれを実行したい場合は、#attached:($build['#attached']['http_header'][] = [['Content-Type', 'application/rss+xml; charset=utf-8']];例はから\Drupal\Core\Render\AttachmentsResponseProcessorInterface::processAttachments)を使用できます
Berdir

2
別の例はで見つけることができます:chapterthree.com/blog/how-to-register-event-subscriber-drupal8
gerzenstl
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.