web-dev-qa-db-ja.com

ユーザーを別のページにリダイレクトするために使用できる関数/メソッドは何ですか?

Drupal 7では、次のコードを使用します。

function my_goto($path) { 
  drupal_goto($path, array(), 301);
}

Drupal 8ではどのコードを使用すればよいですか?

11
Anu Mathew

これは、Drupal 8で使用する必要があるコードです。詳細については、 変更レコード を参照してください。

use Symfony\Component\HttpFoundation\RedirectResponse;

function my_goto($path) { 
  $response = new RedirectResponse($path);
  $response->send();
  return;
}
23
Anu Mathew

構築するには Anu Mathewの応答 ;

ステータスコードを追加するには、RedirectResponseクラスの2番目のパラメータのみです。

use Symfony\Component\HttpFoundation\RedirectResponse;

function my_goto($path) { 
  $response = new RedirectResponse($path, 302);
  $response->send();
  return;
}
8
Christian

これは、組み込みの交響曲EventDispatcherコンポーネントを利用することで実現できます。カスタムモジュールを作成するだけです。 services.ymlファイルを追加し、適切なサービス構成を提供します。

services:
  mymodue.subscriber:
    class: Drupal\my_module\EventSubscriber
    tags:
      - { name: event_subscriber }

モジュールのsrcディレクトリに追加して、EventSubscriber.phpクラスを作成し、メソッドをここに記述します。

    <?php
       use Symfony\Component\HttpFoundation\RedirectResponse;

        public function checkForCustomRedirect(GetResponseEvent $event) {     
            $route_name = \Drupal::request()->attributes->get(RouteObjectInterface::ROUTE_NAME);
            if($route_name === 'module.testPage') {
              $event->setResponse(new RedirectResponse($url, $status = 302,$headers);
            }
         }

          /**
           * {@inheritdoc}
           */
        public static function getSubscribedEvents() {
            $events = [];
            $events[KernelEvents::REQUEST][] = array('checkForCustomRedirect');
            return $events;
        }
4
Jay Chand

私はdrupal 8ではまだ機能していませんでしたが、ドキュメントのとおりdrupal_gotoはDrupal 8.から削除されます。

代わりに drupal_goto書く必要があります:

return new RedirectResponse(\Drupal::url('route.name'));

そして、パラメータを持つこのようなもの:

return new RedirectResponse(\Drupal::url('route.name', [], ['absolute' => TRUE]));

ここをチェック https://www.drupal.org/node/2023537 および class RedirectResponse

4
Sumit Madan

私にとって完璧に機能するリダイレクトコードは次のとおりです:

$response = new RedirectResponse($path);
return $response->send();

その他の場合は、たとえば次のような例外またはエラーが発生します。LogicException:コントローラは応答を返す必要があります...

[〜#〜]または[〜#〜]

https://www.drupal.org/project/drupal/issues/2852657

それについての議論はすでにあります、それが役に立てば幸いです!

1
Junkuncz

これは内部または外部リダイレクトで機能します。

use Symfony\Component\HttpFoundation\RedirectResponse;
use Drupal\Core\Url;

   $url = Url::fromUri('internal:/node/27'); // choose a path
   // $url =  Url::fromUri('https://external_site.com/');
    $destination = $url->toString();
    $response = new RedirectResponse($destination, 301);
    $response->send();
0
Matoeil